Node.js 使用节点express的express验证程序生成的错误

Node.js 使用节点express的express验证程序生成的错误,node.js,express,express-validator,Node.js,Express,Express Validator,我正在使用nodejs、express和express验证器。我正在尝试在我的注册页面上使用express validator。Express validator在对象数组中生成错误 错误: 结果{ 格式化程序:[函数:格式化程序], 错误:[ { 值:未定义, msg:'请输入有效的用户名', 参数:“用户名”, 位置:“正文” }, { 值:未定义, msg:'请输入有效电子邮件', 参数:“电子邮件”, 位置:“正文” }, { 值:未定义, msg:'请输入有效密码', 参数:“密码”,

我正在使用nodejs、express和express验证器。我正在尝试在我的注册页面上使用express validator。Express validator在对象数组中生成错误
错误:
结果{
格式化程序:[函数:格式化程序],
错误:[
{
值:未定义,
msg:'请输入有效的用户名',
参数:“用户名”,
位置:“正文”
},
{
值:未定义,
msg:'请输入有效电子邮件',
参数:“电子邮件”,
位置:“正文”
},
{
值:未定义,
msg:'请输入有效密码',
参数:“密码”,
位置:“正文”
}
]
}

我使用postman来测试注册操作 并在请求中发送以下内容:
{ “用户名”:“ruba”, “电子邮件”:test@gmail.com", “密码”:“1234544545@”

}

my user.js代码:

// Filename : user.js

const express = require("express");
const { check, validationResult} = require("express-validator");
const bcrypt = require("bcryptjs");
const jwt = require("jsonwebtoken");
const router = express.Router();

const User = require("../model/User");

/**
 * @method - POST
 * @param - /signup
 * @description - User SignUp
 */

router.post(
    "/signup",
    [
        check("username", "Please Enter a Valid Username")
        .not()
        .isEmpty(),
        check("email", "Please enter a valid email").isEmail(),
        check("password", "Please enter a valid password").isLength({
            min: 6
        })
    ],
    async (req, res) => {
   
        const errors = validationResult(req);
        console.log(errors);
        if (!errors.isEmpty()) {
            console.log("error sign");

            return res.status(400).json({
                errors: errors.array()
            });
            console.log("error sign2");

        }
        console.log("error sign3");

        const {
            username,
            email,
            password
        } = req.body;
        try {
            let user = await User.findOne({
                email
            });
            if (user) {
                return res.status(400).json({
                    msg: "User Already Exists"
                });
            }

            user = new User({
                username,
                email,
                password
            });

            const salt = await bcrypt.genSalt(10);
            user.password = await bcrypt.hash(password, salt);

            await user.save();

            const payload = {
                user: {
                    id: user.id
                }
            };

            jwt.sign(
                payload,
                "randomString", {
                    expiresIn: 10000
                },
                (err, token) => {
                    if (err) throw err;
                    res.status(200).json({
                        token
                    });
                }
            );
        } catch (err) {
            console.log(err.message);
            res.status(500).send("Error in Saving");
        }
    }
);


module.exports = router;
我的索引代码:

const express = require("express");
const bodyParser = require("body-parser");
const user = require("./routes/user"); //new addition
const InitiateMongoServer = require("./config/db");

// Initiate Mongo Server
InitiateMongoServer();

const app = express();

// PORT
const PORT = process.env.PORT || 4000;

// Middleware
//app.use(bodyParser.json());
app.use(express.json());

app.get("/", (req, res) => {
  res.json({ message: "API Working" });
});


app.use("/user", user);

app.listen(PORT, (req, res) => {
  console.log(`Server Started at PORT ${PORT}`);
});
所以请帮帮我。有什么问题吗

编辑:问题解决了。问题出在邮递员设置中(内容类型必须是JSON)

您启用了吗

app.use(express.json());
因为我看不出您的代码有任何问题(关于express验证器)

我建议您在完成此修复后,将检查更改为body,因为您只想检查body的内容

我正在使用一个中间件来帮助我保持代码简短易读,我将与您分享

函数验证(验证:数组){
返回异步(req:Request,res:Response,next:NextFunction)=>{
等待承诺.all(validations.map((v)=>v.run(req));
常量错误=验证结果(req);
if(errors.isEmpty()){
返回next();
}
const msg=错误
.array()
.map((er)=>`${er.param}`)
。加入(‘,’);
const issue=new issue(400,`缺少或无效参数:${msg}`);
下一期(发行);;
};
}
用法:

router.post(
“/login”,
验证([body('email').isEmail(),body('password').isLength({min:5,max:30})]),
异步(req:Request,res:Response,next:NextFunction):Promise=>{
...
});
``'

是的,我启用了它,但它不工作。谢谢你给我另一个密码。我会在您注释验证代码并打印req.body时尝试,您可以在那里看到您的数据吗?如果不是,可能你是在路线注册后“注入”app.use(express.json())。我尝试了一下,但打印的结果是(未定义)我认为app.use(express.json())在正确的位置。你能分享你定义你的express app的文件吗?我编辑我的问题并添加index.js代码。请回到问题上来。我是stackoverflow的新手,不知道如何共享文件