NodeJS / Express / MongoDB - Wie beschränke ich akzeptierte Parameter in einer POST-Anfrage?

StackOverflow https://stackoverflow.com//questions/25082957

  •  02-01-2020
  •  | 
  •  

Frage

Ich habe einen NodeJS-Server, der auf Express ausgeführt wird.Ich verwende MongoSkin, um meinen Webserver mit MongoDB zu verbinden.Ich habe folgende Route:

var express = require('express');
var router = express.Router();

router.post('/add', function(req, res){
    var db = req.db;
    db.collection('products').insert(req.body, function(err){
        res.send(err);
    });
});

module.exports = router; 

Das obige erstellt einen Endpunkt, der POST-Anforderungen unter akzeptiert http://domain.com/add.Im Moment speichert dieser Endpunkt alle Parameter, die in einer AJAX-Anforderung enthalten sind.Ich habe keine Kontrolle darüber, welche Schlüssel / Wert-Paare ich in meiner Datenbank speichern möchte.

Mit PHP müssten Sie explizit nach Parametern in Ihrem Skript suchen, um sie zu verwenden, dh:

$param1 = $.POST['param1'];
$param2 = $.POST['param2'];
$param3 = $.POST['param3'];  
// Do something with these values

Wie würde ich das mit NodeJS machen?

War es hilfreich?

Lösung

req.body ist nur ein gewöhnliches js-Objekt, also sollte es genau das gleiche wie PHP sein.Angenommen, Ihre Post-Anfrage hat die folgenden Werte: param1=1,param2=2,param3=invalid.Dann req.body wird die folgende Form haben:

{
    param1: 1,
    param2: 2,
    param3: "invalid"    
}

Sie müssen also nur ein neues Objekt mit den gewünschten Werten erstellen:

var allowed_params = {
    param1: req.body.param1, // Or if you prefer req.body["param1"]
    param2: req.body.param2
};
db.collection('products').insert(allowed_params, callback_func);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top