【发布时间】:2013-11-30 00:59:20
【问题描述】:
我想用 Node.js、Express、MongoDB 和 Mongoose 创建一个宁静的 API。
架构、模型和路由如下:
// Schema
var OperatorSchema = new Schema({
name : { type: String, unique: true , required: true},
short_name : { type: String, unique:true, required: true },
});
Operator = mongoose.model('Operator', OperatorSchema);
// My Api for Operator
app.post('/api/operators', common.createOperator);
exports.createOperator = function(req, res){
Operator.create(req.body, function (err, operator) {
// If failed, return error message
if (err) {
console.log(err);
res.send(404, err)
}
else {
res.send(operator)
}
})
};
我有三个问题:
1 - 处理类似的错误我发现传递给回调的 err 对象具有不同的结构,具体取决于错误来自 mongoose 还是 mongo。
// Mongo Error:
{
"name": "MongoError",
"err": "E11000 duplicate key error index: ussdauto.operators.$name_1 dup key: { : \"OpTest\" }",
"code": 11000,
"n": 0,
"connectionId": 231,
"ok": 1
}
// Mongoose Error:
{
"message": "Validation failed",
"name": "ValidationError",
"errors": {
"short_name": {
"message": "Path `short_name` is required.",
"name": "ValidatorError",
"path": "short_name",
"type": "required"
}
}
}
我不想暴露关于错误的所有细节:只需要一条解释错误的消息就足够了,例如,不需要知道它是 mongoerror 还是 validationError。你是怎么管理的?
2 - 第二个问题更加全球化:我将有多个 API,每次我都需要做同样的工作:检查是否有错误,是否有一些通过 API 返回JSON 错误消息,如果没有正常继续。如何只使用一个函数来处理错误并在任何地方使用它?
3 - 我来自 python 世界(实际上是 Django),Tastypie 是一个非常棒的模块,它自己处理所有这些东西。你知道 Node.js + Express 是否存在这样的模块吗?
【问题讨论】:
-
每个帖子只问一个问题会更好。
标签: node.js mongodb express mongoose