2

尝试插入用户时,CouchDB 似乎会随机抛出错误。

以下是 CouchDB 的完整回复:

{ [Error: missing]
  name: 'Error',
  scope: 'couch',
  status_code: 404,
  'status-code': 404,
  request:
   { method: 'POST',
     headers:
      { 'content-type': 'application/json',
        accept: 'application/json',
        'X-CouchDB-WWW-Authenticate': 'Cookie',
        cookie: [Object] },
     uri: 'http://127.0.0.1:5984/_users',
     body: '{"_id":"org.couchdb.user:fake_user","name":"fake_user","realname":"fake user","institution":"366a8e5ba861bdd9cad5cd318a002ee4","email":"fake_user@gmail.com","phone":"123-456-7890","type":"user","roles":[],"password":"123456","level":"user","unconfirmed":"true"}',
     jar: false },
  headers:
   { date: 'Tue, 21 Jan 2014 20:32:23 GMT',
     'content-type': 'application/json',
     'cache-control': 'must-revalidate',
     'status-code': 404,
     uri: 'http://127.0.0.1:5984/_users' },
  errid: 'non_200',
  error: 'not_found',
  reason: 'missing',
  description: 'missing',
  stacktrace:
   [ 'Error: missing',
     '    at Request._callback (/apps/arcapp/node_modules/nano/nano.js:304:39)',
     '    at Request.self.callback (/apps/arcapp/node_modules/nano/node_modules/request/request.js:129:22)',
     '    at Request.EventEmitter.emit (events.js:98:17)',
     '    at Request.<anonymous> (/apps/arcapp/node_modules/nano/node_modules/request/request.js:873:14)',
     '    at Request.EventEmitter.emit (events.js:117:20)',
     '    at IncomingMessage.<anonymous> (/apps/arcapp/node_modules/nano/node_modules/request/request.js:824:12)',
     '    at IncomingMessage.EventEmitter.emit (events.js:117:20)',
     '    at _stream_readable.js:872:14',
     '    at process._tickCallback (node.js:415:13)' ] }

这显然不是很有见地。我得到的只是error: not_found, reason: missing,这并没有告诉我太多。它只是有时会发生,我真的不知道是什么触发了它。对此的任何见解都非常感谢。

这是相关的代码。我正在使用nano,但这只是对 CouchDB 的基本发布请求。

var user = {
    "_id": "org.couchdb.user:" + username,
    "name": username,
    "realname": first + " " + last,
    "institution": institution,
    "email": email,
    "phone": phone,
    "type": "user",
    "roles": [],
    "password": password,
    "level": "user",
    "unconfirmed": "true",
    "verificationCode": verificationCode
};

nano.request({
    db: '_users',
    method: 'POST',
    body: user
}, function(err, body) {
    if(err) {
        console.log("ERROR INSERTING USER");
        console.log(err);
        res.send(err.status_code + " " + err.reason, err.status_code);
        return;
    }

...
4

2 回答 2

1

这里的问题是我用来验证用户的 cookie 在注销后没有正确取消设置。因此,如果您注销并立即尝试注册,数据库会将请求验证为登录用户。由于只允许数据库管理员访问 _users 数据库,因此 CouchDB 会抛出“404 missing”错误。

我是nano.config.cookie在登录时设置的,所以当我在注销时取消设置时,它起作用了!

于 2014-01-23T01:46:07.703 回答
0

这个错误敲响了警钟,但不幸的是,我不是 100% 如何/如果我修复了它。

我确实注意到您包含“角色:[]”的一件事,除非您以管理员身份发帖,否则我认为这是不允许的。

我没有足够的代表发表评论,但你能发送发出请求的代码吗?

于 2014-01-22T13:41:11.987 回答