Unhandled rejection rangerror: invalid status code: 0
Unhandled rejection rangerror: invalid status code: 0
我遇到了这个问题,我无法摆脱它。
我要做的是发布"a post"(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!' });
}
});
})};
然后,我将获得所有订阅那种 post 的人。 (任何用户都可以对 post 的元数据进行过滤)
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!' }));
})};
最后,从所有订阅者的列表中,我将只选择一个带有过滤器的订阅者,将其应用于 post 的元数据,看看该用户是否对此感兴趣。 (用户模式有电子邮件引用了过滤器模式,所以我将在它们之间进行聚合以查看用户是否有过滤器)。如果没有人有过滤器,我会 return 订阅者列表而不删除任何人,否则我会删除对 post 不感兴趣的人。
我仍然必须实施删除部分。
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
我在 Whosebug 上看到了以下未解决的问题:, , 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}))
});
经常让我摆脱困境的是更小的、可测试的、有希望的 returning 单元。以第一个函数为例,将其设为模型函数,让controller管理req
和res
。让它只做模型工作,return 直接来自数据库的承诺。
exports.create_a_topic = function(topicType, topicProperties) {
let newTopic = new Topic({
topic_type: topicType,
properties: topicProperties
});
// important: return the promise returned by save...
return newTopic.save();
})
与第二个功能类似...
exports.get_subscribers = function(topicType) {
return User.find({subscription: topicType}, {'email': 1, 'queueName': 1, 'isFiltered': 1});
})
这是一个兼顾两者的...
exports.create_a_topic_and_get_subscribers = function(topicType, topicProperties) {
var result = {};
return create_a_topic(topicType, topicProperties)
.then((topic) => result.topic = topic)
.then(() => get_subscribers(topicType) )
.then((subscribers) => {
result.subscribers = subscribers
return result
});
}
等等。让控制器从 req 中提取参数并根据模型功能的运行方式安排响应。换句话说...
app.post('/test_publish_topic', (req, res) => {
let topicType = req.body.topic_type;
let topicProperties = req.body.properties[0];
project.create_a_topic_and_get_subscribers(topicType, topicProperties)
.then((result) => res.status(200).json(result))
.catch((error) => res.status(500).json(error))
});
关键是将它们创建为小的 promise-returning 单元。建立一些测试个人的路线。您可以在控制器中链接模型单元,并将 req 和 res 的操作留给控制器。
发现路由中的问题:
而不是
.catch(err => res.status(err.status >= 100 && err.status < 600 ? err.code: 500).send({message: err.message}))
我应该用
.catch(err => res.status(err.status >= 100 && err.status < 600 ? **err.status**: 500).send({message: err.message}))
所以,问题是
err.code
而不是
err.status
顺便说一句,我会按照上面的提示进行操作。
感谢大家!
我遇到了这个问题,我无法摆脱它。 我要做的是发布"a post"(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!' });
}
});
})};
然后,我将获得所有订阅那种 post 的人。 (任何用户都可以对 post 的元数据进行过滤)
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!' }));
})};
最后,从所有订阅者的列表中,我将只选择一个带有过滤器的订阅者,将其应用于 post 的元数据,看看该用户是否对此感兴趣。 (用户模式有电子邮件引用了过滤器模式,所以我将在它们之间进行聚合以查看用户是否有过滤器)。如果没有人有过滤器,我会 return 订阅者列表而不删除任何人,否则我会删除对 post 不感兴趣的人。 我仍然必须实施删除部分。
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
我在 Whosebug 上看到了以下未解决的问题:
路线
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}))
});
经常让我摆脱困境的是更小的、可测试的、有希望的 returning 单元。以第一个函数为例,将其设为模型函数,让controller管理req
和res
。让它只做模型工作,return 直接来自数据库的承诺。
exports.create_a_topic = function(topicType, topicProperties) {
let newTopic = new Topic({
topic_type: topicType,
properties: topicProperties
});
// important: return the promise returned by save...
return newTopic.save();
})
与第二个功能类似...
exports.get_subscribers = function(topicType) {
return User.find({subscription: topicType}, {'email': 1, 'queueName': 1, 'isFiltered': 1});
})
这是一个兼顾两者的...
exports.create_a_topic_and_get_subscribers = function(topicType, topicProperties) {
var result = {};
return create_a_topic(topicType, topicProperties)
.then((topic) => result.topic = topic)
.then(() => get_subscribers(topicType) )
.then((subscribers) => {
result.subscribers = subscribers
return result
});
}
等等。让控制器从 req 中提取参数并根据模型功能的运行方式安排响应。换句话说...
app.post('/test_publish_topic', (req, res) => {
let topicType = req.body.topic_type;
let topicProperties = req.body.properties[0];
project.create_a_topic_and_get_subscribers(topicType, topicProperties)
.then((result) => res.status(200).json(result))
.catch((error) => res.status(500).json(error))
});
关键是将它们创建为小的 promise-returning 单元。建立一些测试个人的路线。您可以在控制器中链接模型单元,并将 req 和 res 的操作留给控制器。
发现路由中的问题: 而不是
.catch(err => res.status(err.status >= 100 && err.status < 600 ? err.code: 500).send({message: err.message}))
我应该用
.catch(err => res.status(err.status >= 100 && err.status < 600 ? **err.status**: 500).send({message: err.message}))
所以,问题是
err.code
而不是
err.status
顺便说一句,我会按照上面的提示进行操作。 感谢大家!