简体   繁体   English

Nodejs post 方法 - req.body.variable 未定义

[英]Nodejs post method - req.body.variable undefined

I have the following App.js :我有以下App.js

var express = require('express'),
app = express(),
engines = require('consolidate'),
MongoClient = require('mongodb').MongoClient,
assert = require('assert'),
bodyParser = require('body-parser')

app.engine('html', engines.nunjucks);
app.set('view engine', 'html');
app.set('views', __dirname + '/views');

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

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

    var movieName = req.body.movie_name;

    console.log(movieName);

});

// No route matching:
app.use(function (req, res) {
    res.sendStatus(404);
});

var server = app.listen(3000, function () {
    var port = server.address().port;
    console.log('Express server listening on port %s.', port);
});

My html page:我的html页面:

<h1> Add new movies</h1>

<form action="/insert_movie" method="POST">

    <input type="text" id="movie_name">
    <input type="text" id="movie_year">
    <input type="text" id="movie_imdb">

    <input type="submit" value="Submit" />

</form>

When I enter values into the text boxes and press submit, my post method is hit ('/insert_movie') .当我在文本框中输入值并按提交时,我的 post 方法是 hit ('/insert_movie') However movieName is undefined not only that but req.body is {}然而,movieName 不仅未定义,而且req.body{}

Can someone explain to me what I'm doing wrong here as I've gone through many solutions on this website however they're all pointing the body parser being incorrectly setup, I've tried the following:有人可以向我解释我在这里做错了什么,因为我在本网站上经历了许多解决方案,但是他们都指出正文解析器设置不正确,我尝试了以下操作:

  1. app.use(bodyParser.urlencoded({ extended : true })); app.use(bodyParser.urlencoded({extended : true }));
  2. app.use(bodyParser.urlencoded()); app.use(bodyParser.urlencoded());
  3. app.use(bodyParser.json()); app.use(bodyParser.json());

Neither of these fix my issue.这些都不能解决我的问题。

You need to add name attribute to the input elements.您需要将name属性添加到 input 元素。 That's one of the things your body-parser library needs to parse the form.这是您的body-parser库解析表单所需的内容之一。

<h1> Add new movies</h1>

<form action="/insert_movie" method="POST">
  <input type="text" name="movie-name" id="movie_name">
  <input type="text" name="movie-year" id="movie_year">
  <input type="text" name="movie-url" id="movie_imdb">
  <input type="submit" value="Submit" />
</form>

try to use this尝试使用这个

var bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({
  limit: '500mb',
  extended: true,
  parameterLimit: 50000
}));
app.use(expressValidator());
app.use(bodyParser.json());

use multer middle ware for req.body对 req.body 使用 multer 中间件

var app = require('express')();
var multer = require('multer);
var upload = multer().any();
 //multer().any() upload both array and file 
//add the multer middle ware in your router  
app.post('/insert_movie',upload,  function (req, res) {
    var movieName = req.body.movie_name;
   console.log(req.body);
    console.log(movieName);

});

you can see the official npm blog https://www.npmjs.com/package/multer你可以看到官方npm博客https://www.npmjs.com/package/multer

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM