我有一个REST API,允许用户添加名称和网址。在此POST请求中,名称和URL将添加到我的mongodb中。
这是POST请求
curl -XPOST http://localhost:8080/urls -d 'name=John&url=http://111.11.1.111:1111'
这就是它添加到dbs的方式:
{ "_id" : ObjectId("57bd87e7c94363a17620ab4c"), "name" : "John", "url" : "http://111.11.1.111:1111", "__v" : 0 }
这是允许POST的路线:
router.post('/', function (req, res, next) {
Urls.create(req.body, function (err, post) {
if (err) return next(err)
res.json(post)
})
})
这样我就可以添加多个具有相同名称和网址的网址 - 没有验证。
当用户尝试再次将相同的名称和/或网址插入dbs时,如何确保引发错误?
我不知道从哪里开始,但我认为这是一个dbs选项?例如。 findById如果存在,则另外添加到dbs?
答案 0 :(得分:0)
Mongoose验证了其文档中指定的一些选项。
在模型中,您可以在其中定义架构。使用对象验证输入。
name : { type : String , unique : true, required : true },
url: { type : String , unique : true, required : true }
请参阅:http://mongoosejs.com/docs/validation.html
但是,单独使用它并不理想。它只会抛出一个错误而不会给用户任何反馈。为此,我们可以检查数据库中是否存在记录。
router.post('/', function (req, res, next) {
//Query the database for that name
Urls.findOne({'name': req.body.name}, function (err, name) {
//If a result is returned, throw an error
if (name) {
res.send({available: false});
}
//If not result - its unique and we can continue.
if (!name) {
Urls.create(req.body, function (err, post) {
if (err) return next(err)
res.json(post)
})
}
});
})