【问题标题】:Do not allow two names to be the same - mongodb不允许两个名字相同 - mongodb
【发布时间】:2016-08-25 17:51:42
【问题描述】:

我有一个 REST API,它允许用户添加名称和 URL。在这个 POST 请求中,名称和 url 被添加到我的 mongodb 中。

这是 POST 请求

curl -XPOST http://localhost:8080/urls -d 'name=John&url=http://111.11.1.111:1111' 

这就是它被添加到数据库的方式:

{ "_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)
  })
})

这样我就可以添加多个具有相同名称和 url 的 url - 没有验证。

当用户尝试再次将相同的名称和/或 url 插入 dbs 时,如何确保引发错误?

我不确定从哪里开始,但我认为这是一个 dbs 选项?例如。 findById 如果存在,是否添加到 dbs 中?

【问题讨论】:

标签: node.js mongodb rest mongoose


【解决方案1】:

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

    });
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多