我正在尝试将我自己的express.js
api与nodejs一起使用。问题是它可以工作,但是却出现错误,我无法访问请愿结果。这是我的代码:
route.js:
app.post('/petition/:id', function(req, res) {
console.log("ID: ", req.params.id);
if (!req.params.id) {
return res.send({"status": "error", "message": "Chooser id needed"});
}
else {
indicoUtils.indicoPositivosNegativos(req.params.id).then(function(result) {
return res.send({"result": result});
})
}
})
Calculator.js:
var indicoPositivosNegativos = function (chooserId) {
var TweetModel = mongoose.model('Tweet'.concat(chooserId), Tweet.tweetSchema);
TweetModel.find({},{ _id: 1, tweet: 1}).then(tweets =>
Promise.all(
tweets.map(({ _id, tweet }) =>
indico.sentiment(tweet).then(result =>
TweetModel.findOneAndUpdate({ _id }, { indicoPositivoNegativo: result }, { new: true })
.then( updated => { console.log(updated); return updated })
)
)
)
)
};
我正在用邮递员对此进行测试,它显示了错误:
TypeError:无法读取未定义的属性.then
最佳答案
这基本上意味着您试图调用.then函数的对象之一是未定义的。
特别是对象indicoUtils.indicoPositivosNegativos(req.params.id)应该是一个承诺,但是您的函数indicoPositivosNegativos不会返回承诺。实际上,您的函数不会返回任何内容,因此.then会在未定义的值上调用。
解决方案很简单,您必须在Calculator.js上添加return语句,以返回如下所示的promise:
var indicoPositivosNegativos = function (chooserId) {
var TweetModel = mongoose.model('Tweet'.concat(chooserId), Tweet.tweetSchema);
return TweetModel.find({},{ _id: 1, tweet: 1}).then(tweets =>
Promise.all(
tweets.map(({ _id, tweet }) =>
indico.sentiment(tweet).then(result =>
TweetModel.findOneAndUpdate({ _id }, { indicoPositivoNegativo: result }, { new: true })
.then( updated => { console.log(updated); return updated })
)
)
)
)
};
关于javascript - 访问自己的api时无法读取未定义的属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50698615/