Экспресс-валидатор не работает без (не рекомендуется?) body-parser - PullRequest
0 голосов
/ 22 ноября 2018

Я видел несколько сообщений, в которых, кажется, говорится, что body-parser не рекомендуется использовать по крайней мере для использования с express-validator.Я также не вижу упоминания body-parser на странице «Экспресс-проверка документации».Тем не менее, когда я пытаюсь следовать этому руководству по началу работы, я обнаруживаю, что не могу заставить его работать без body-parser.Я не мог точно следовать их учебнику, потому что не понимал некоторые из них, но не думаю, что сделанные мной упрощения будут иметь отношение к этой проблеме.

Мой вопрос: можно ли использовать body-parser?как я это делаю?

Вот что я сделал (у меня версия узла 10.10.0):

mkdir express-validator
cd express-validator
npm install --save express
npm install --save express-validator

файл app.js:

const express = require('express')
const app = express()

app.use(express.json())

const { check, validationResult } = require('express-validator/check')

const bodyParser = require('body-parser')

app.use(bodyParser.urlencoded({ extended: false }))

app.post('/user', [
  // username must be an email
  check('username').isEmail(),
  // password must be at least 5 chars long
  check('password').isLength({ min: 5})
], (req, res) => {
  // Finds the validation errors in this request and wraps them in an object with handy functions
  const errors = validationResult(req)
  if (!errors.isEmpty()) {
    res.send(errors.array())
    return
  }
  res.send('ok')
})

app.listen(5000, () => console.log(`listening on port $5000`))

Я запускаю сервер, используя node app.js

Затем я использую curl:

curl -d username=fred@gmail.com -d password=12345 localhost:5000/user

Это работает, т.е. я получаю ОК обратно.Если я удаляю символ @ с адреса электронной почты, я получаю это:

[{"location":"body","param":"username","value":"fredgmail.com","msg":"Invalid value"}]

Если я закомментирую строку: app.use(bodyParer.url etc etc, я получаю сообщение об ошибке error.array () с обеими командами curl, указанными выше.

Можно ли использовать body-parser как я?Если нет, что я должен сделать, чтобы заставить это работать?

1 Ответ

0 голосов
/ 26 ноября 2018

Да, это правильное использование.

Там нет упоминания о bodyParser в документах экспресс-проверки, потому что в большинстве случаев вам это не нужно.

JSON и urlencoded bodyпарсинг в настоящее время включен в экспресс, поэтому вам не нужен другой пакет, если вы имеете дело только с ними;вам просто нужно убедиться, что ваше приложение использует express.json() или express.urlencoded():

app.use(express.urlencoded());
// is the same as
app.use(bodyParser.urlencoded());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...