【发布时间】:2017-08-22 13:33:08
【问题描述】:
我遇到了这个问题,我无法摆脱它。 我要做的是发布“帖子”(json),将其保存到 MongoDB。
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时遇到问题。
未处理的拒绝范围错误:无效状态代码: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}))
});
【问题讨论】:
-
那么我是不是使用了错误的 Promise 模式? @BenjaminGruenbaum
-
我会的,'承诺'd :) @Bergi
标签: node.js mongodb promise unhandled