Express body-parser request.body 返回未定义

Express body-parser request.body returning undefined

当我 运行 这个应用程序并提交表单时 'console.log(request.body)' 返回未定义。我是节点 js 的初学者。谁能解释一下我做错了什么?

这是注册表 register.jade

doctype html
html
    head
        title.
            Fonebook
        link(rel='stylesheet', href='/assets/bootstrap/css/bootstrap.min.css')
        script(src='https://code.jquery.com/jquery-2.2.0.min.js')
        script(src='/assets/bootstrap/js/bootstrap.min.js')
    body
        div.container
            h3.
                The Fonebook
            form(method="POST",class="center",id="regForm",action='/doReg',enctype="multipart/form-data")
                div.panel.panel-info
                    div.panel-heading.
                        Registration
                    div.panel-body
                        div.col-md-offset-3.col-md-6.col-md-offset-3.form-group
                            label.
                                Profile Picture:
                            input(type='file',name='proPic')
                        div.col-md-offset-3.col-md-6.col-md-offset-3.form-group
                            label.
                                Email:
                            input.form-control(id="email", type="email", name="email", placeholder="Enter email ")
                        div.col-md-offset-3.col-md-6.col-md-offset-3.form-group
                            label.
                                Name:
                            input.form-control(id="name", type="text", name="name", placeholder="Enter name ")
                        div.col-md-offset-3.col-md-6.col-md-offset-3.form-group
                            label.
                                Password:
                            input.form-control(id="password", type="password", name="password")
                        div.col-md-offset-3.col-md-6.col-md-offset-3.form-group
                            a(href='login').
                                Already have an account?
                    div.panel-footer
                        button.btn.btn-info(type="submit").
                            Register

这是我的 app.js 文件

var express = require('express');
var app = express();

var mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1/test');

var uploadDir = __dirname + '/uploads';

var fs = require('fs');

var multer = require('multer');

var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended: false}));
app.use(bodyParser.json());


var conn = mongoose.connection;

app.set('views', './views');
app.set('view engine', 'jade');

app.use('/assets', express.static(__dirname + '/public'));

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

app.all('/', function (req, res) {
    res.render('login');

})

app.all('/register', function (req, res) {
    res.render('register');
})

app.all('/login', function (req, res) {
    res.render('login');
})

var storage = multer.diskStorage({
    destination: function (request, file, callback) {
        callback(null, uploadDir);
    },
    filename: function (request, file, callback) {
        //console.log(file);
        callback(null, Date.now() + '.jpg');
    }
});
var upload = multer({storage: storage}).single('proPic');

app.all('/doReg', function (request, response) {
    upload(request, response, function (err) {
        if (err) {
            console.log(err);
            return;
        }
        //console.log(request.file);
        response.end('Your File Uploaded');
    })
    console.log(request.body);
});

app.listen(port);

body-parser 不支持多部分表单。

From their README

This does not handle multipart bodies, due to their complex and typically large nature. For multipart bodies, you may be interested in the following modules:

busboy and connect-busboy

multiparty and connect-multiparty

formidable

multer

鉴于您已经在使用 multer,您可以通过以下方式访问您的字段:

app.all('/doReg', upload, function (request, response) {
    console.log(request.body);
});