我遇到了這個問題,我無法擺脫它。 我要做的是發佈「帖子」(json),將其保存到MongoDB中。未處理的拒絕範圍錯誤:無效的狀態碼:0
exports.create_a_topic = function(req, res) {
return new Promise((resolve,reject) => {
var newTopic = new Topic({
topic_type: req.body.topic_type,
properties: req.body.properties[0]
});
newTopic.save()
.then(() => resolve({ status: 201, message: 'Topic published Successfully!' }))
.catch((err) => {
if (err.code == 11000) {
reject({ status: 409, message: 'Topic Already published!' });
} else {
reject({ status: 500, message: 'Internal Server Error!' });
}
});
})};
然後,我打算讓所有訂閱了那種帖子的人都可以。 (任何用戶都可以具有或不交的元數據的過濾器)
exports.get_subscribers = function(req, res) {
return new Promise((resolve,reject) => {
User.find({subscription: req.body.topic_type}, {'email': 1, 'queueName': 1, 'isFiltered': 1})
.then(users => {
if (users.length == 0) {
reject({ status: 404, message: 'Users Not Found!' });
} else {
//res.subscribers = {};
res.subscribers = users;
resolve({ status: 200, message: users });
}
})
.catch(err => reject({ status: 500, message: 'Internal Server Error!' }));
})};
最後,從所有用戶的列表中,我要帶一個過濾器只是一個將其應用到這篇文章的元數據和看看這個用戶是否對它感興趣。 (用戶模式有一個電子郵件誰有一個過濾器模式的引用,所以我要做他們之間的聚合,看看用戶是否有過濾器或沒有)。如果沒有人擁有過濾器,我會返回訂閱者列表而不刪除任何內容,否則我會刪除對帖子不感興趣的人)。 我仍然必須實施刪除部分。
exports.apply_filter = function(req, res, subscribers) {
var email_of_filters = [];
subscribers.forEach(function(value) {
email_of_filters.push(value.email);
});
console.log(email_of_filters);
return new Promise((resolve,reject) => {
User.aggregate([
{$project: {"email": "$email", "filter": "$filter"}},
{$match: {isFiltered: {$ne: false}, email: {$in: email_of_filters}}},
{$unwind: "$email"},
{$lookup:
{from: "filters", localField: "email", foreignField: "email", as: "filter"}
}
])
.then(users_with_filters => {
if (users_with_filters.length == 0) {
resolve({ status: 200, message: subscribers });
} else {
reject({ status: 400, message: 'Error!' });
}
})
.catch(err => reject({ status: 500, message: 'Internal server error!' }));
});
};
如果單獨調用'get_subscribers',它會很好。 與「create_a_topic」相同。 調用apply_filter時遇到問題。
Unhandled rejection rangerror: invalid status code: 0
我看到的StackOverflow以下問題不解決:1,2,3。 任何提示將不勝感激。
路線
app.post('/publish_topic', (req, res) => {
project.create_a_topic(req, res)
.then(result1 => {return project.get_subscribers(req, res);})
.then(result2 => {return project.apply_filter(req, res, res.subscribers);})
.then(result3 => {res.status(result3.status).json({ message: result3.message });})
.catch(err => res.status(err.status >= 100 && err.status < 600 ? err.code : 500).send({message: err.message}))
});
https://stackoverflow.com/questions/23803743/what-is-the-explicit-promise-construction-antipattern-and-how-do-i-avoid-it –
所以我用了一個錯誤的承諾模式? @BenjaminGruenbaum – JackLametta
避免['Promise' constructor antipattern](https://stackoverflow.com/q/23803743/1048572?What-is-the-promise-construction-antipattern-and-how-to-avoid-it)! – Bergi