回调的响应问题

时间:2017-07-29 20:49:04

标签: javascript node.js mongodb express callback

我想我在这里错过了一些简单的东西,但我认为我已经看过这么久了。

我最初在函数内联中看到了你所看到的内容,但是想把它拉出来并在我的应用程序的其他方面使用它,但我似乎无法将预期的信息传递到POST响应中。

这是我的功能:

let lookUpUserId = (x) => {
  mongo.connect(url, (err,db) => {
    assert.equal(null,err);
    db.collection('data').findOne({"email": {'$eq' : x }},{"_id":1}, (err,result) => {
      console.log(result); // I'm getting the correct response here.
      assert.equal(null,err);
      db.close();
      return result; // This seems to be returning empty
    });
  });
};

现在我在这里称之为(简化):

router.post('/test1', (req,res,next) => {
    console.log('Hit on POST /test1');
    let obj = 'email@email.com';
    let a = lookUpUserId(obj);
    res.send(a);
});

现在在服务器的控制台中,我收到了预期的信息:

{_id:someIdHere }

然而,我在客户端回复我的POST时,我得到一个空身。

任何人都可以在这里指出我正确的方向。

1 个答案:

答案 0 :(得分:2)

lookUpUserId异步工作。由于您不使用promises,因此可以将回调作为lookUpUserId函数的第二个参数传递:

let lookUpUserId = (x, callback) => {
  mongo.connect(url, (err,db) => {
    assert.equal(null,err);
    db.collection('data').findOne({"email": {'$eq' : x }},{"_id":1}, (err,result) => {
      console.log(result);
      assert.equal(null,err);
      db.close();
      callback(result);
    });
  });
};

并将其命名为:

lookUpUserId(obj, (result) => res.send(result));

甚至:

lookUpUserId(obj, res.send);