Не могу получить данные из поста формы на сервер nodeJS - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь написать страницу входа. я получил HTML-страницу с окном входа Я ввожу адрес электронной почты и пароль, затем отправляю на сервер, на сервере я получил маршрут, который проверяет данные на БД, если документ существует, если он существует, следует перенаправить на главную страницу. проблема в том, что данные, которые я посылаю из формы на сервер, всегда неопределены. Я проверяю здесь другие вопросы о госзакупках, и я не нашел хорошего результата для этого

html страница входа:

<!DOCTYPE html>
<html>
  <head>
     <meta charset="utf-8">
     <link rel="stylesheet" type="text/css" href="/css/style.css" />
     <title>{{PageTitle}}</title>
  </head>
  <body>
    {{> header}}

    <div class="login-box">
      <div class="form">
        <form action="/get_user" method="post" class="login-form">
          <input type="email" name="Email" placeholder="Email"/>
          <input type="password" name="Password" placeholder="Password"/>
          <button type="submit">login</button>
        </form>
      </div>
    </div>

    {{> footer}}
 </body>

код сервера:

const _ = require('lodash');
const express = require('express');
const bodyParser = require('body-parser');
const {mongoose} = require('./db/mongoose');
const hbs = require('hbs');

var {User} = require('./models/user');

var app = express();
app.set('view engine', 'hbs');
const port = process.env.PORT;
hbs.registerPartials(__dirname + '/../views/partials');

app.user(bodyParser.json());

app.use(express.static(__dirname + '/../public'));
app.use(express.static(__dirname + '/../public/images'));
app.use(express.static(__dirname + '/../public/fonts'));

app.listen(port, () => {
  console.log(`Started on port ${port}`);
});

app.get('/', (req, res) => {
  res.render('login.hbs', {
    PageTitle: 'Log In',
    ConnectUser: 'Guest'
  });
});

app.post('/get_user', (req, res) => {
 var body = _.pick(req.body, ['Email , 'Password']);

 User.findOne({
   Email: body.Email,
   Password: body.Password
 }).then((user) => {
  console.log(body.Email + ' ' + body.Password);
  if(!user) {
    return res.status(404).send();
  }
  var fullName = user.First_Name + ' ' + user.Last_Name;
  res.redirect('/mainPage', {ConnectUser: fullName});
}).catch((e) => {
  res.status(400).send();
 });
});

я сделал несколько проверок и когда я вызываю / get_user req.body-> var body -> user r empty передача данных от формы к серверу. Я также проверяю этот маршрут на почтальоне, и его работа находит, когда я сам пишу тело, единственная проблема, о которой я могу думать, это данные, которые я посылаю из формы, отправка в виде json, а анализатор тела - только в формат json, так что, возможно, мне нужно изменить строку

app.use (bodyParser.json ());

если кто-нибудь 1 может поставить в правильном направлении, я плохо оцениваю этого.

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

При использовании html-формы с методом post данные отправляются на сервер с Content-Type: application/x-www-form-urlencoded вместо JSON.

Json bodyparser ничего с этим не сделает, так как он не использует формат JSON для отправки данных. См. Руководство по MDN по методу post.

В коде вашего сервера ниже app.use(bodyParser.json()) добавьте следующее:

app.use(bodyParser.urlencoded({extended: true}));

Это добавит данные в тело запроса так, как вы ожидаете.

0 голосов
/ 09 сентября 2018

Попробуйте поиграть с атрибутом типа enc-type и посмотрите, как настроить bodyparser для получения необходимых значений на основе enc-типа.

  • применение / х-WWW-форм-urlencoded
  • многочастному / форм-данных

https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/enctype

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...