2016-08-04 7 views
0

Ich versuche eine korrekte Postvalidierung zu erreichen, die mit Express.JS eloquent und DRY ist. Was ist der beste Weg, dies richtig zu machen?Wie können Sie eine JSON-Post-Validierung mit Express.js durchführen?

Hier ist ein Code abgeschnitten wo ich versuche sicherzustellen, dass diese POST-Route nicht den Node.js-Server abstürzen und ist typsicher. Aber ich fühle, dass dies eine hässliche Art und Weise, dies zu erreichen:

app.post('/signup', function(req, res) { 
if(typeof req.body.name !== 'string' || typeof req.body.email !== 'string' || typeof req.body.password !== 'string'){ 
    res.status(400).send({status:400, message: 'Invalid json post format', type:'client'}); 
}else{ 
    User.findOne({ 
     name: req.body.name 
    }, function(err, user) { 
     if (err) throw err; 

     if (!user) { 
      User.findOne({ 
       email: req.body.email 
      }, function(err, user) { 

       if (err) throw err; 

       if (!user) { 
        //both username and email are neither in use so lets create a user 
        var passwordToSave = bcrypt.hashSync(req.body.password, salt); 

        var user = new User({ 
         name: req.body.name, 
         email: req.body.email, 
         password: passwordToSave, 
         admin: false 
        }); 
        user.save(function(err) { 
         if (err) throw err; 

         console.log('User created successfully'); 
         res.json({ success: true }); 
        }); 

       } else if (user) { 
        res.json({ success: false, message: 'Signup failed. Username already in use.' }); 
       } 

      });   
     } else if (user) { 
      res.json({ success: false, message: 'Signup failed. Username already in use.' }); 
     } 
    }); 
}}); 
+0

Werfen Sie einen Blick auf jsonschema: https://www.npmjs.com/package/jsonschema –

Antwort

1

Der Json-Schema-Standard (und beliebige von verschiedenen Bibliotheken, die es umzusetzen) ist ein großer DRY Ansatz. Dieselbe Validierung kann sowohl auf der Client- als auch auf der Serverseite durchgeführt werden. Darüber hinaus können Sie sogar die Json-Formularbibliothek von jdorn verwenden, um automatisch das erforderliche HTML-Formular aus dem Schema zu generieren.

1

Ich empfehle Joi mit Ihrem Validierungstool

es super einfach und Osten sein

In Ihrem Szenario anzupassen, was Sie brauchen

const schema = Joi.object().keys({ 
    name: Joi.string(), 
    email: Joi.string(), 
    password: Joi.string() 
}) 

Joi.validate(req.body, schema); 

ist auch strenger verwenden können Regel, um Ihre Eingabe zu validieren, z .email(), .min(), .mex() usw.

+0

ich für den Hinweis, dass aus Joi einem Versuch dank geben werde. –

Verwandte Themen