如何在node.js中的res.send内承诺?

我正在创build一个小链接缩短应用程序。 这是Express.js POST函数。 我想发送一个新的URL和文件数据库中的文件。 这主要是为了确保每个网站都与一个唯一的短号码相关联。

app.post('/api/shorturl/new', (req, res) => { var body = _.pick(req.body, ['url']); // url attached to body.url with lodash Link.find({}).exec((err, res) => { // Link is a mongoose model var count = res.length; var newSite = new Link({ website: body.url, count }); newSite.save((err) => { if (err) console.log(err); }) res.send(newSite); }); }); 

当程序到达res.send(newSite)时,控制台说res.send不是一个函数。 这是因为它在承诺之内,但是我不确定如何解决问题,并保持代码的function。 我怎样才能得到回复发送?

谢谢!

这不是你需要的res 。 它被内部callback论证所覆盖。 您需要将内部res重命名为_res ,例如:

 app.post('/api/shorturl/new', (req, res) => { var body = _.pick(req.body, ['url']); // url attached to body.url with lodash Link.find({}).exec((err, _res) => { // Link is a mongoose model var count = _res.length; var newSite = new Link({ website: body.url, count }); newSite.save((err) => { if (err) console.log(err); }) res.send(newSite); }); }); 

这很可能是你的链接function重写expressjs的资源。 尝试在Link.find({}).exec((err, res) => {重命名resvariablesLink.find({}).exec((err, res) => {允许res.send(newSite);从上面的范围使用resvariables。