javascript - 无法使用 Express-validator 验证用户输入

标签 javascript node.js mongodb

我附上了注册表和验证代码 (Node.js),如下所示。我已经尝试验证来自注册表的用户输入,但没有成功!但成功存储到MongoDB数据库中。

<form  action="/register" method="POST">
  <input type="text" name="name" placeholder="username"><br>
  <input type="password" name="userpass" placeholder="password"><br>
  <input type="submit" name="submit" value="send">
</form>

router.post('/register', function(req, res, next) {
// Get user input from register form
let nam = req.body.name;
let pass = req.body.userpass;

req.checkBody('nam', 'Name is required').notEmpty();
req.checkBody('pass', 'Pass is required').notEmpty();

var errors = req.validationErrors();
if(errors){
   console.log(errors)
}
else {
   var newUser = new User({
     username:nam,
     pass:pass
   });
   User.createUser(newUser,function(err,user){
          if(err) throw err;
          console.log(user);
   });
   res.location('/register');
   res.redirect('/register');
}

我在运行代码时得到了这个结果。

GET /register 304 25.699 ms - -
[ { param: 'nam', msg: 'Name is required', value: undefined },
{ param: 'pass', msg: 'Pass is required', value: undefined } ]

最佳答案

下面的代码应该可以工作,我认为主要问题是使用实际的表单变量名称(name、userpass):

index.js

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const expressValidator = require('express-validator');

app.use(express.static('./'));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(expressValidator());

var router = express.Router();
app.use("/", router);

router.post('/register', function(req, res, next) {
    console.log('/register POST body: ', req.body);

    /* Check form variables. */
    req.checkBody('name', 'Name is required').notEmpty();
    req.checkBody('userpass', 'Pass is required').notEmpty();

    var errors = req.validationErrors();
    if (errors) {
        console.error("Validation errors occurred: ", errors);
        res.status(400).json({ status: "Bad Request" });
        return;
    }

    console.log("Validation successful");

    // Get user input from register form
    let nam = req.body.name;
    let pass = req.body.userpass;

    var newUser = new User({
        username:nam,
        pass:pass
    });
    User.createUser(newUser,function(err,user){
            if(err) throw err;
            console.log(user);
    });
    res.location('/register');
    res.redirect('/register');
});

app.listen(3000);

index.html

<!doctype html>
<html lang="en">
    <body>
    <form  action="/register" method="POST">
        <input type="text" name="name" placeholder="username"><br>
        <input type="password" name="userpass" placeholder="password"><br>
        <input type="submit" name="submit" value="send">
    </form>
    </body>
</html>

关于javascript - 无法使用 Express-validator 验证用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54035326/

相关文章:

javascript - 使用 nodejs 和 knox 如何查看 S3 存储桶中的文件

mongodb - 我可以将 Apache Solr 与 MongoDB 同步吗

windows - 已安装全局 NPM 包但未找到命令

javascript - 如何在 material-ui 组件上设置 HTML 元素 ID?

javascript - Angular JS在textarea中显示和编辑模型

javascript - 正则表达式匹配最后一个冒号后面不在大括号内的字符

node.js - 使用socket.io连接node js服务器和golang服务器有什么缺点?

node.js - Express - multer fileFilter 错误处理

javascript - 使用 promises 将异步函数的结果返回为 'variable'

php - 在网站托管期间出现此错误