在节点中发布请求时从mongo获取数据?

时间:2018-08-18 21:14:09

标签: javascript node.js mongodb mongoose

我有一个简单的POST请求,可以通过nodemailer发送邮件。

app.post("/sendMail", function(req, res) {
    nodemailer.sendMail({ from: 'xx', to: userEmail }, function(error, info) {
        if (error) {
            return res.send(500, 'Internal error, try again later');
        }

        res.send(200, 'Mail sent!');
    });
});

但是,出于安全原因,我不将用户邮件存储在客户端的任何位置。但是在请求中,我有用户id

db中的单个集合如下:

{
   id: '1312feew3',
   email: 'patrick@hotmail.com',
}

因此,如果我的req.body.id等于1312feew3,我需要获取指定的集合并从其中取出email

我尝试过的

我试图做简单:

var userEmail = getUserById(req.body.id, function (err, user) {
    if (err) {
        return res.send(400, 'Something went wrong');
    }
    return res.json(user);
}).email;

(我将其放在第一个代码的第二行中)

不幸的是,它没有按我预期的那样工作。

它不会引发任何错误,但是邮件没有被发送。

1 个答案:

答案 0 :(得分:1)

假设getUserById是异步的,它不能直接返回用户,而您必须从回调函数中访问它:

getUserById(req.body.id, function (err, user) {
    if (err) {
        return res.send(400, 'Something went wrong');
    }

    var userEmail = user.email;

    // Send the email here, within the callback as well.
    ...

    return res.json(user);
});