【问题标题】:Response issue with callback回调的响应问题
【发布时间】:2017-07-29 20:49:03
【问题描述】:

我想我在这里遗漏了一些简单的东西,但我认为我已经看这个太久了。

我最初在函数内联中看到了您在此处看到的内容,但想将其取出并在我的应用程序的其他方面使用它,但我似乎无法将预期的信息放入 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 时,我得到了一个空正文。

谁能在这里指出正确的方向。

【问题讨论】:

    标签: javascript node.js mongodb express callback


    【解决方案1】:

    lookUpUserId 异步工作。由于您没有使用 Promise,因此您可以将回调作为 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);
    

    【讨论】:

    • 在这里尝试了两种解决方案,第一个解决方案完美,尽管我无法让速记版本正常工作,因为它是通过“req 未定义”。不管怎样,解决了。
    • @Gates req was undefined ?我什至没有在这里使用req
    • 是的,我不太确定,可能与我设置路由器的方式有关。我会深入研究的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    相关资源
    最近更新 更多