2017-08-09 29 views
0

我有以下App.js後的NodeJS方法 - req.body.variable未定義

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> 

當我值輸入到文本框,然後按提交,我post方法被擊中('/insert_movie')。然而的movieName是不確定的,不僅如此,但req.body{}

能向我解釋的人我在做什麼錯在這裏,因爲我已經經歷了許多解決了這個網站上。但是他們都指向身體解析器被錯誤地設置,我試過以下內容:

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

這些都不能解決我的問題。

+5

您需要name'屬性添加'來輸入元素。 E.G: '' – Rowland

+0

我需要睡一會兒!錯誤的ID名稱...睡前的時間! 謝謝@Rowland –

+0

不用擔心。我會將其添加爲答案,您可以接受它。 – Rowland

回答

2

您需要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> 
0

嘗試使用此

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

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

使用multer中間件爲req.body

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); 

}); 

你可以看到官方博客故宮 https://www.npmjs.com/package/multer