2016-08-25 2 views
0

Ich habe eine REST API, die es einem Benutzer erlaubt, einen Namen und eine URL hinzuzufügen. Bei dieser POST-Anfrage werden der Name und die URL zu meinem mongodb hinzugefügt.Lassen Sie nicht zu, dass zwei Namen gleich sind - mongodb

Dies ist die POST-Anfrage

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

Und das ist, wie es zu dem dbs hinzugefügt:

{ "_id" : ObjectId("57bd87e7c94363a17620ab4c"), "name" : "John", "url" : "http://111.11.1.111:1111", "__v" : 0 } 

Das ist mein Weg, die POST erlaubt:

router.post('/', function (req, res, next) { 
    Urls.create(req.body, function (err, post) { 
    if (err) return next(err) 
    res.json(post) 
    }) 
}) 

Dieser So kann ich mehrere URLs mit demselben Namen und derselben URL hinzufügen - es gibt keine Validierung.

Wie kann ich sicherstellen, dass ein Fehler ausgelöst wird, wenn ein Benutzer versucht, denselben Namen und/oder dieselbe URL erneut in die dbs einzufügen?

Ich bin mir nicht sicher, wo ich anfangen soll, aber ich nehme an, das ist eine dbs-Option? Z.B. findById, wenn es existiert, fügen andere zu den dbs hinzu?

+0

Sie Index erstellen können, entnehmen Sie bitte diesem Link [Es enthält die Lösung des Problems] (http://stackoverflow.com/questions/12395118/mongodb-setting-unique-field) –

Antwort

0

Mongoose hat Validierung einige Optionen in ihrer Dokumentation angegeben.

In Ihrem Modell, wo Sie Ihr Schema definieren. Verwenden Sie ein Objekt, um die Eingabe zu validieren.

name : { type : String , unique : true, required : true }, 
url: { type : String , unique : true, required : true } 

See: http://mongoosejs.com/docs/validation.html

aber es ist nicht ideal dies allein zu verwenden. Es wird nur einen Fehler werfen und dem Benutzer kein Feedback geben. Um dies zu tun, könnten wir prüfen, ob ein Datensatz in der Datenbank existiert.

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

    }); 
}) 
Verwandte Themen