Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript expressValidator错误:expressValidator不是函数_Javascript_Node.js_Express - Fatal编程技术网

Javascript expressValidator错误:expressValidator不是函数

Javascript expressValidator错误:expressValidator不是函数,javascript,node.js,express,Javascript,Node.js,Express,我正在尝试安装和使用这个软件包。我已经安装了软件包版本(6.0.0),然后在我的server.js文件中,代码是: const bodyParser = require('body-parser') const expressValidator = require('express-validator') const express = require('express') const nunjucks = require('nunjucks') const sessionInMemory =

我正在尝试安装和使用这个软件包。我已经安装了软件包版本(6.0.0),然后在我的server.js文件中,代码是:

const bodyParser = require('body-parser')
const expressValidator = require('express-validator')
const express = require('express')
const nunjucks = require('nunjucks')
const sessionInMemory = require('express-session')
const cookieParser = require('cookie-parser')
然后我写了几行如下:

const app = express()
const documentationApp = express()
app.use(expressValidator())
当服务器重新加载更改(使用nodemon)时,应用程序崩溃并显示:

类型错误:expressValidator不是函数

在我的server.js文件中还有其他一些代码,但我已经去掉了大部分我认为不相关的代码

expressValidator的控制台日志:

{ oneOf: [Function: oneOf],
  buildSanitizeFunction: [Function: buildSanitizeFunction],
  sanitize: [Function],
  sanitizeBody: [Function],
  sanitizeCookie: [Function],
  sanitizeParam: [Function],
  sanitizeQuery: [Function],
  buildCheckFunction: [Function: buildCheckFunction],
  check: [Function],
  body: [Function],
  cookie: [Function],
  header: [Function],
  param: [Function],
  query: [Function],
  checkSchema: [Function: checkSchema],
  matchedData: [Function: matchedData],
  validationResult: { [Function] withDefaults: [Function: withDefaults] },
  Result: [Function: Result] }
router.get('/email-adress', function (req, res) {
  res.render('email-adress', { success: req.session.success, errors: req.session.errors })
  req.session.errors = null
})

router.post('/finished', function (req, res) {
  let email = req.body.email

  req.checkBody('email', 'Email required').isEmail()

  var errors = req.validationErrors()
  if (errors) {
    req.session.errors = errors
    req.session.success = false
    res.redirect('/email-adress')
  } else {
    req.session.success = true
    res.redirect('/finished')
  }
})
routes.js文件的代码:

{ oneOf: [Function: oneOf],
  buildSanitizeFunction: [Function: buildSanitizeFunction],
  sanitize: [Function],
  sanitizeBody: [Function],
  sanitizeCookie: [Function],
  sanitizeParam: [Function],
  sanitizeQuery: [Function],
  buildCheckFunction: [Function: buildCheckFunction],
  check: [Function],
  body: [Function],
  cookie: [Function],
  header: [Function],
  param: [Function],
  query: [Function],
  checkSchema: [Function: checkSchema],
  matchedData: [Function: matchedData],
  validationResult: { [Function] withDefaults: [Function: withDefaults] },
  Result: [Function: Result] }
router.get('/email-adress', function (req, res) {
  res.render('email-adress', { success: req.session.success, errors: req.session.errors })
  req.session.errors = null
})

router.post('/finished', function (req, res) {
  let email = req.body.email

  req.checkBody('email', 'Email required').isEmail()

  var errors = req.validationErrors()
  if (errors) {
    req.session.errors = errors
    req.session.success = false
    res.redirect('/email-adress')
  } else {
    req.session.success = true
    res.redirect('/finished')
  }
})
将此行替换为

这样做。移除

app.use(expressValidator()) 

行。

耶!就连我也有同样的问题。您可以通过在根文件夹中写入命令来更改版本

命令:

npm install express-validator@5.3.1 --save-exact

Express Validator已更新,您不能以这种方式使用它 使用快速验证器

或者,通过运行以下命令,您可以继续使用以前的版本

npm uninstall express-validator
npm install express-validator@5.3.0
转到package.json将“express validator”:“^6.6.0”更改为“express validator”:“^5.3.0”,然后手动运行npm i

just update the express validator , will do the tri

npm安装快捷版-validator@5.3.1--准确地保存

这件事发生在我身上,因为我遵循的是一个过时的(2019)教程。如果您安装的是旧版本(5.3.1适合我),它就可以工作。我在与Jonathan Wexler的书《使用Node.js进行编程》一起工作时遇到了这个问题,Jonathan Wexler

console记录您的expressValidator并显示结果检查文档它与您在这里所做的不同它需要const{check,validationResult}=require('express-validator');然后在路由[check('username').isEmail(),check('password').isLength({min:5})]expressValidator中作为中间件传递检查是一个对象,而不是一个函数@ArpitPandey我可以看出其中的区别,我刚刚添加了routes.js文件的代码,该文件检查电子邮件输入以确保它是有效的电子邮件地址。我不确定如何为版本6重写该代码?谢谢,但这引发了一个新错误:
throw new-TypeError('app.use()需要一个中间件函数')
它不会崩溃,但在提交时会进入/完成,但错误为
req。check不是一个非常有效的函数,谢谢。最后一个问题,现在返回JSON,我如何将JSON放入模板中,并在出现错误时呈现电子邮件地址页面,或者如果没有问题,则呈现完成的页面?感谢您的帮助如果您的视图在API中,您可以在if-else条件下使用res.render,或者如果您的视图是单独的,您可以将JSON返回给API调用方,并在那里决定您要显示什么。检查我已经进行了更改。为了使其正常工作,最后一个问题是它显示了errorPage,但带有成功的URL(完成页)。我猜它需要一些if errors中的逻辑。I是否可以继续/停留在原始页面而不是帖子页面?然后使用express的red.redirect功能,它将根据您的需要重定向到successUrl或errorUrl,只需检查此线程。问题是使用库的版本6.0.0。取消链接可能会很有用倒立答案,解释为什么要降级库的版本以及为什么要手动执行。它可以在与答案相同的库版本中解决吗?我想知道你是否在给出负面评级之前运行解决方案…这很容易解决问题,就像上面的其他帖子一样,最好停止寻找无意义的内容给予负面评价的借口。
npm uninstall express-validator
npm install express-validator@5.3.0
just update the express validator , will do the tri