我有以下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);
});


我的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>


当我在文本框中输入值并按Submit时,我的发布方法将按('/insert_movie')。但是不仅未定义movieName,而且req.body{}

有人可以向我解释我在这里做错了什么,因为我在该网站上浏览了许多解决方案,但是他们都指出人体分析器设置不正确,我尝试了以下方法:


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


这些都不解决我的问题。

最佳答案

您需要将name属性添加到输入元素。这是您的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>

10-08 03:16