body-parser: невозможно получить значения из формы - PullRequest
0 голосов
/ 23 апреля 2020

Я создал форму для регистрации пользователя. Я хочу получить значения из формы, используя body-parser, но я не могу это сделать. При печати в консоли выдает неопределенное печатное изображение. Я не понимаю, что я делаю не так. Я даже пытался использовать почтальон, но это не работает. Вот мой код:

var express = require('express'),
app = express(),
mongoose = require('mongoose'),
bodyParser = require('body-parser'),
passport =  require('passport'),
LocalStrategy =  require('passport-local'),
methodOverride = require('method-override'),
flash = require('flash'),
session = require('express-session');
app.get("/about", function(req, res) {
   res.render("about");
});

app.get("/register", function(req, res) {
    res.render("register");
});

app.post("/register", function(req, res) {
    var firstName = req.body.firstName,
        lastName = req.body.lastName,
        username = req.body.username,
        email = req.body.email;
    var newUser = new User({
        firstName: firstName,
        lastName: lastName,
        username: username,
        email: email
    });
    console.log(firstName + " " + req.body.password + " " + req.body.c_password);
    User.register(newUser, req.body.password, function(err, user) {
        if(err) {
            return res.render("register", {'error': err.message});
        }
        passport.authenticate('local')(req, res, function() {
            req.flash('success', 'Welcome ' + user.username);
            res.redirect('/home');
        })
    })
   });

   var port = process.env.PORT || 3000;

   app.listen(port, function() {
        console.log("Service Running");
   });

А вот моя форма

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Hotel Site</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.12.0/css/all.css" integrity="sha384-REHJTs1r2ErKBuJB0fCK99gCYsVjwxHrSU0N7I1zl9vZbggVJXRMsv/sLlOAGb4M" crossorigin="anonymous">
    <link rel="icon" href="https://www.svgrepo.com/show/12002/hotel.svg" type="image/x-icon">
    <link rel="stylesheet" href="/stylesheets/style.css">
    <script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
</head>
<body>

<div class="container" style="margin-bottom: 4.5rem;">
        <h1 style="text-align: center; margin-top: 7rem; margin-bottom: 20px">Sign Up</h1>
        <div class="col-lg-6" style="margin: auto;">
            <form action="/register" method="POST" enctype="multipart/form-data">
                <div class="form-row">
                    <div class="form-group col-6">
                        <input class="form-control" type="text" name="firstName" placeholder="First Name" required>
                    </div>
                    <div class="form-group col-6">
                        <input class="form-control" type="text" name="lastName" placeholder="Last Name" required>
                    </div>
                </div>      
                <div class="form-group">
                    <input class="form-control" type="text" name="username" placeholder="Username" required>
                </div>
                <!-- <div class="form-group">
                    <input class="form-control" type="email" name="email" placeholder="E-mail" required>
                </div> -->
                <div class="form-group">
                    <input class="form-control" type="password" name="password" placeholder="Password" required>
                </div>
                <div class="form-group">
                    <input class="form-control" type="password" name="c_password" placeholder="Confirm Password" required>
                </div>
                <div class="form-group">
                    <button class="btn btn-lg btn-primary btn-block">Submit</button>
                </div>
            </form>
            <a href="/home">Go Back</a>
        </div>
</div>
</body>

Помощь очень ценится !!!

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Express использует промежуточное ПО, являющееся функциями, которые имеют доступ к входящим запросам. Запросы могут быть изменены et c. Проще говоря, промежуточное ПО может использоваться для многих вещей.

Вы не настроили bodyParser в качестве промежуточного ПО, поэтому оно не будет работать. Это может быть сделано:

app.use(bodyParser.urlencoded({extended: false})) для данных формы app.use(bodyParser.json()) для входящих JSON перед вашими маршрутами.

Вот руководство ExpressJs в середине: https://expressjs.com/en/guide/writing-middleware.html

0 голосов
/ 23 апреля 2020

Вы успешно импортировали body-parser в свое приложение, но не смогли его использовать. Добавьте следующий код, прежде чем использовать маршруты.

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

Надеюсь, это было полезно.

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