2016-08-25 104 views
0

我有一個REST API,允許用戶添加名稱和URL。在這個POST請求中,名稱和URL被添加到我的MongoDB中。不允許兩個名稱相同 - 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中插入相同的名稱和/或url時發生錯誤?

我不確定從哪裏開始,但我認爲這是一個dbs選項?例如。 findById是否存在,其他情況下添加到dbs中?

+0

您可以創建索引,請參考以下鏈接[它包含了你的問題的解決方案(http://stackoverflow.com/questions/12395118/mongodb-setting-unique-field) –

回答

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

    }); 
}) 
相關問題