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