不要让两个名字相同 - mongodb

时间:2016-08-25 09:44:43

标签: node.js mongodb rest mongoose

我有一个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?

1 个答案:

答案 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)
            })
        }

    });
})