3

我正在编写一个处理多部分表单数据的 Node js 应用程序,因此我为此目的使用 multer。问题是req.body始终未定义。

这是我的代码:

var app = express();
var http = require('http').createServer(app);

//All environments
app.set('port', process.env.PORT || config.ports.HTTP_PORT);
app.set('views', config.folders.views);
app.set('view engine', 'ejs');

//Express 4 dependencies
app.use(morgan('dev'));
app.use(multer({ dest: config.folders.uploads}))
app.use(cookieParser()); //Parser for cookie session
app.use(session({ secret: 'secret' }));
app.use(passport.initialize()); //Init passport
app.use(passport.session()); //Persistent login sessions
app.use(flash()); //Flash messages

//Public folder
app.use(express.static(config.folders.public));

require('./auth')(passport); //Add auth methods to passport
require('./routes')(app, passport); //Add routes

app.post('/test', function(req, res) {

    console.log(req.body.test); //req.body always undefined

});

可能是什么问题呢?

编辑:

现在req.body填充了数据,但 req.files 属性仍然未定义

4

3 回答 3

1

使用以下代码添加 bodyParser :

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}));
于 2014-11-09T18:31:24.770 回答
0

HTML 表单需要enctype适当地设置属性才能发送文件。例子:

<form method="POST" action="/foo" enctype="multipart/form-data">
于 2014-11-09T21:36:57.410 回答
0

编辑您的原始代码:
您必须安装 Multer Multer Docs npm i multer -S

const app = express();
const http = require('http').createServer(app);
const multer = require('multer'); // added, wasn't in your original code.

//All environments
app.set('port', process.env.PORT || config.ports.HTTP_PORT);
app.set('views', config.folders.views);
app.set('view engine', 'ejs');

//Express 4 dependencies
app.use(morgan('dev'));
// newly added
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}));

app.use(multer({ dest: config.folders.uploads}).single('file')) // added the single() method
app.use(cookieParser()); //Parser for cookie session
app.use(session({ secret: 'secret' }));
app.use(passport.initialize()); //Init passport
app.use(passport.session()); //Persistent login sessions
app.use(flash()); //Flash messages

//Public folder
app.use(express.static(config.folders.public));

require('./auth')(passport); //Add auth methods to passport
require('./routes')(app, passport); //Add routes

测试代码:

app.post('/test', (req, res) => {
    console.log(req.body.test); //req.body always undefined
    console.log(req.file); // added this, it should work fine now.
});
于 2017-04-22T10:58:31.470 回答