javascript - 如何使用 Express.js 进行正确的 JSON 后验证?

标签 javascript node.js express

我正在尝试实现正确的后期验证,这在使用 Express.JS 时是 Eloquent 且干燥的。正确执行此操作的最佳方法是什么?

这是一个代码片段,我试图确保此 POST 路由不会使 Node.js 服务器崩溃并且类型安全。但我觉得这是实现这一目标的一种丑陋方式:

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.' });
        }
    });
}});

最佳答案

Json 模式标准(以及实现它的任何各种库)是一种很好的 DRY 方法。可以在客户端和服务器端进行相同的验证。更重要的是,您甚至可以使用 jdorn 的 Json 表单库从架构自动生成必需的 html 表单!

关于javascript - 如何使用 Express.js 进行正确的 JSON 后验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38771770/

相关文章:

node.js - 不同客户端 Nodejs 的 session id 相同

javascript - Node Js Express JS 错误处理麻烦

javascript - 如何在调用函数时自动绑定(bind) "this"?

javascript - 格式化数字,如 22,55,86,21,28

javascript - 即使某些客户端未将监听器设置为 ('myMessage' , socket.broadcast.emit 'myMessage' , data') 是否会向所有客户端发出消息?

node.js - Sinon 没有对 module.exports stub

javascript - 在谷歌地图信息窗口中获取wordpress帖子内容

javascript - Google reCaptcha 重置不起作用

javascript - 低db : queries are synchronous or asynchronous?

angularjs - 自动对焦在某些条件后将启用的禁用字段