- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经尝试解决这个问题 2 个小时了,但我有点沮丧。基本上,我想验证表单输入,但我总是收到此错误。
TypeError: req.checkBody is not a function
at C:\Users\bobbo\Desktop\Develops\Project_folder\routes\index.js:19:7
at Layer.handle [as handle_request] (C:\Users\bobbo\Desktop\Develops\Project_folder\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\bobbo\Desktop\Develops\Project_folder\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\bobbo\Desktop\Develops\Project_folder\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\bobbo\Desktop\Develops\Project_folder\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\bobbo\Desktop\Develops\Project_folder\node_modules\express\lib\router\index.js:281:22
at Function.process_params (C:\Users\bobbo\Desktop\Develops\Project_folder\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\bobbo\Desktop\Develops\Project_folder\node_modules\express\lib\router\index.js:275:10)
at Function.handle (C:\Users\bobbo\Desktop\Develops\Project_folder\node_modules\express\lib\router\index.js:174:3)
at router (C:\Users\bobbo\Desktop\Develops\Project_folder\node_modules\express\lib\router\index.js:47:12)
几乎我能找到的唯一信息是告诉我编写 app.use(expressValidator());
在 app.use(bodyParser.json()); 之后
,但无论我做什么,我仍然得到同样的错误。这是我使用的代码。
app.use(bodyParser.urlencoded({ extended: false }));
//index.js
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
var expressValidator = require('express-validator');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(expressValidator());
var router = express.Router();
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
router.get('/signup', function(req, res, next) {
res.render('signup', { title: 'Express' });
});
router.post('/signup', function(req, res){
var name = req.body.name;
console.log(name); //works
req.checkBody("name", "Invalid name").notEmpty();
var errors = req.validationErrors();
if(errors){
console.log('errors');
} else{
console.log('no errors');
}
});
module.exports = router;
应用程序.js
//app.js
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var bodyParser = require('body-parser');
var expressValidator = require('express-validator');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
// BodyParser Middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/users', usersRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
包.json
//package.json
{
"name": "pizzaonline",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"body-parser": "^1.18.3",
"cookie-parser": "~1.4.3",
"debug": "~2.6.9",
"express": "~4.16.0",
"express-session": "^1.15.6",
"express-validator": "^5.2.0",
"http-errors": "~1.6.2",
"morgan": "~1.9.0",
"pug": "2.0.0-beta11"
}
如果我注释掉 req.checkBody("name", "Invalid name").notEmpty();
,下一个要执行的快速验证代码是 var errors = req .validationErrors();
,给我一个相同的错误,告诉我 req.validationErrors()
不是函数。我是新手,但这告诉我 express-validator 没有正确安装,我错了吗?任何帮助深表感谢。提前致谢。
最佳答案
在您的嵌套路由文件(index.js
和 users.js
)中,您正在创建新的应用程序实例并将该验证器附加到它实际上是不正确的.
因为创建新的应用程序实例,您在 app.js
中创建了不同于 app
的新应用程序上下文。
所以这里是修复:
1) 在 app.js
文件的这一行上方附加快速验证器:
app.use(expressValidator());
app.use('/', indexRouter);
app.use('/users', usersRouter);
2) 从嵌套路由文件中移除 app
对象生成,并使其看起来像:
//index.js
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
router.get('/signup', function(req, res, next) {
res.render('signup', { title: 'Express' });
});
router.post('/signup', function(req, res){
var name = req.body.name;
req.checkBody("name", "Invalid name").notEmpty();
var errors = req.validationErrors();
if(errors){
console.log('errors');
} else{
console.log('no errors');
}
});
module.exports = router;
关于javascript - express-validator - req.checkBody 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50358842/
我正在按照 Mozilla Express 教程 (https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs/
我正尝试在注册系统中实现一些验证,但出现错误: TypeError: req.checkBody is not a function 来自以下代码: module.exports = fun
我已经尝试解决这个问题 2 个小时了,但我有点沮丧。基本上,我想验证表单输入,但我总是收到此错误。 TypeError: req.checkBody is not a function at C:\U
TypeError: req.checkBody is not a function at C:\techscape\nodeauth\routes\users.js:41:7 at
我在使用快速验证器时遇到问题,特别是 isDate 函数。我已经采取措施使用 expressvalidator、bodyparse、validator 模块等。所有路由仅在此之后..环境是 Node
在nodejs中我们通常会做这样的事情: req.checkBody('name', 'Group name is required.').notEmpty(); 同样,我也做了这样的事情: req.
我是一名优秀的程序员,十分优秀!