Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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
Node.js Express验证器主体不是函数_Node.js_Express Validator - Fatal编程技术网

Node.js Express验证器主体不是函数

Node.js Express验证器主体不是函数,node.js,express-validator,Node.js,Express Validator,我正在尝试让express validator工作,但尽管我在跟踪,但无法让它工作。它给了我:“未捕获的例外:身体不是一个功能”。 我使用的是ExpressValidator版本:5.3.1 console.log(主体)给出“未定义” 如果我适应了: var validator = require('express-validator'); router.post('/', [ console.log(validator) ], (req, res, next) => { //thin

我正在尝试让express validator工作,但尽管我在跟踪,但无法让它工作。它给了我:“未捕获的例外:身体不是一个功能”。 我使用的是ExpressValidator版本:5.3.1

console.log(主体)给出“未定义”

如果我适应了:

var validator = require('express-validator');
router.post('/', [
console.log(validator)
], 
(req, res, next) => {
//things
});
它作为输出给出:

[Function: expressValidator] {
  validator: {
    version: '10.11.0',
    toDate: [Function: toDate] { default: [Circular] },
    toFloat: [Function: toFloat] { default: [Circular] },
    toInt: [Function: toInt] { default: [Circular] },
    toBoolean: [Function: toBoolean] { default: [Circular] },
    equals: [Function: equals] { default: [Circular] },
    contains: [Function: contains] { default: [Circular] },
    matches: [Function: matches] { default: [Circular] },
    isEmail: [Function: isEmail] { default: [Circular] },
    isURL: [Function: isURL] { default: [Circular] },
    isMACAddress: [Function: isMACAddress] { default: [Circular] },
    isIP: [Function: isIP] { default: [Circular] },
    ...
    ...
    },
 utils: {
    toString: [Function],
    formatParamOutput: [Function: formatParamOutput],
    mapAndExtend: [Function: mapAndExtend],
    makeSanitizer: [Function: makeSanitizer],
    replaceArgs: [Function: replaceArgs]
  }
}]
所以我可以看到我需要的东西在那里的某个地方,即isEmail()等等。但是,我必须告诉函数我想在电子邮件中检查它。既然说明了这一点,您就应该使用
body('email').isEmail()来实现这一点,我不知道如何做,因为他们的示例对我不起作用。
很抱歉,这一切都很简单。我在NodeJs方面还没有很多经验。

根据,您可以将中间件重写为:

const express = require('express');
const router = express.Router();
const { body, validationResult } = require('express-validator');

validationBodyRules = [
    body('login', 'login is required').exists(),
    body('password', 'password is required').exists(),
    body('login', 'login is required').notEmpty(),
    body('password', 'password is required').notEmpty()
];

checkRules = (req, res, next) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
        return res.status(400).json({ errors: errors.array() });
    }
    next();
};

router.post('/', validationBodyRules, checkRules, (req, res, next) => {
     //validated body
     console.log(req.body)
    //things
});
使用早期版本: app.js


您正在使用express validator v6.14.6?最新版本是v6.6.1。对不起,真的。我键入了npm-v express validator,但显然它打印了npm版本。我有5.3.1,它在语法方面稍微好一点,是的。但这并不能解决我的问题。body一开始没有定义。不管我做了什么,它都不会起作用。是的,这是因为你的版本。在升级到6.6.0版后(在package.json中进行调整并运行npm install,它编译得很好),我只是将我的归档文件检查到一个适用于您的版本的旧代码。
const express = require('express');
const router = express.Router();
const { body, validationResult } = require('express-validator');

validationBodyRules = [
    body('login', 'login is required').exists(),
    body('password', 'password is required').exists(),
    body('login', 'login is required').notEmpty(),
    body('password', 'password is required').notEmpty()
];

checkRules = (req, res, next) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
        return res.status(400).json({ errors: errors.array() });
    }
    next();
};

router.post('/', validationBodyRules, checkRules, (req, res, next) => {
     //validated body
     console.log(req.body)
    //things
});
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const expressValidator = require('express-validator');
  
const app = express();

cors({
  credentials: true,
  origin: true
});

app.use(cors());
app.use(bodyParser.json());
app.use(expressValidator()); //<--right after body-parser middleware

app.use(require('./server/index'));

app.get('*', (req, res) => {
    res.status(404).json({ errors: [{location: req.path, msg: 'Not found', param: null}]});
});
fileValidation = (req, res, next) => {
        req.checkBody('height', 'height é obrigatório').isInt({ min: 0 });
        req.checkBody('width', 'width é obrigatório').isInt({ min: 0 });
        req.checkBody('sequence', 'sequence é obrigatório').isInt({ min: 0 });

        req.getValidationResult().then((result) => {
            if (!result.isEmpty()) {
                return res.status(400).json({ errors: result.array() });
            }
            return next();
        });
    };
    
addFile = (req, res) => {
    let sql = 'INSERT INTO media_file(height, width,"exibitionTime", sequence, media, mimetype, img) VALUES ($1, $2, $3, $4, $5, $6, $7) returning *';
    try {
      const result = await postgres.client.query(sql, [req.body.height, req.body.width, req.body.exibitionTime, req.body.sequence, req.body.media, req.file.mimetype, req.file.buffer]);
      res.status(201).json(result.rows[0]);
      res.end();
    } catch (err) {
      return res.status(500).json({ errors: [{ param: undefined, msg: err.detail, value: undefined }] });
    }
  };
router.post('/files/', fileValidation, addFile);

module.exports = router;