2014-12-01 3 views
2

Я не понимаю, почему req.body не определен. Он всегда обращается к функции в файле node.js '/ formstuff', но req.body не определен.Node.js, express, html form req.body не определено

Когда я смотрю результаты, которые он отправил в cmd, я не вижу ни одного запроса. на самом деле res.query и res.params пусты.

Любая помощь будет оценена, спасибо.

Экспресс:

var express = require('express'), 
app = express(); 
var fs = require('fs'); 
var Promise = require('promise'); 



// Handle Get Request 
app.get('/', function(req, res){ 
// get stuff from request 
var index; 

fs.readFile('./form.html', function (err, data) { 
if (err) { 
    throw err; 
} 
    index = data; 

    res.setHeader("Content-Type", "text/html"); 
    res.send(index); 

}); 

}); 


app.post('/formstuff', function(req, res){ 
    console.log(req.body); 

    res.send(); 
}); 

HTML:

<html> 
<head> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<style type = "text/css"> 

body 
{ 
    margin:0; 
} 
#head 
{ 
    width:100%; 
    color:#FAFAFA; 
    height:170px; 
    text-shadow: 2px 2px 0px rgba(150, 150, 150, 1); 
    background: #39d800; /* Old browsers */ 
    background: -moz-linear-gradient(top, #39d800 0%, #00a008 100%); /* FF3.6+ */ 
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#39d800), color-stop(100%,#00a008)); /* Chrome,Safari4+ */ 
    background: -webkit-linear-gradient(top, #39d800 0%,#00a008 100%); /* Chrome10+,Safari5.1+ */ 
    background: -o-linear-gradient(top, #39d800 0%,#00a008 100%); /* Opera 11.10+ */ 
     background: -ms-linear-gradient(top, #39d800 0%,#00a008 100%); /* IE10+ */ 
    background: linear-gradient(to bottom, #39d800 0%,#00a008 100%); /* W3C */ 
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#39d800', endColorstr='#00a008',GradientType=0); /* IE6-9 */ 
    font-family: Brush Script MT; 
    font-weight:bold; 
    font-size:8.5em; 
    text-align:center; 
} 

form div 
{ 
    padding:0.8%; 
} 
fieldset 
{ 
    font-size: 2em; 
    position:relative; 
} 
input 
{ 
    width: 150px; 
    height: 50px; 
    font-size: 1.2em; 
    clear:both; 
} 
</style> 
</head> 
<body> 

<div id = "head">Notifye</div><br> 

<br> 

<fieldset> 
    <legend>Search</legend> 

     <form name = "form" method = "post" action = "http://127.0.0.1:3000/formstuff"> 

     <input type="text" required = "required" name = "tag" placeholder = "lolcats"> 
     <div><input type = "submit" name = "submit" value = "Submit" id = "sub"></div> 

    </form> 

</fieldset> 

</body> 

ответ

2

Вы упускаете тело синтаксического анализа промежуточного уровня.

Если вы не загружаете файлы, вы можете просто npm install body-parser, а затем добавить app.use(require('body-parser').urlencoded()); перед любым из ваших маршрутов.

+0

После установки он вызывает ошибку, заявив, что не может найти модуль body-parser. Я проверил, и он существует в папке модулей узлов после того, как я его установил. –

+0

Работает для меня на различных версиях Express (например, 3.x вверх). Убедитесь, что вы следуете приведенным здесь примерам: https://github.com/expressjs/body-parser – martenc

0

Вам нужны еще несколько пакетов. Я предлагаю:

var connect =require('connect'); // 
var multer  =require('multer'); // This is used when multipart/form-data are required 
app.use(connect.json()); // for json 
app.use(connect.urlencoded()); // for application/x-www-form-urlencoded 
app.use(multer({ dest: './uploads/'}));// for multipart/form-data 

Это предпочтительнее body-parser, который не является безопасным, как объяснено here. См. connect docs и multer docs

+0

Ссылка, приведенная как причина не использования 'body-parser', больше недействительна. Эта ссылка описывает промежуточное программное обеспечение Express ** 3 ** 'bodyParser', которое было в комплекте с Express, которое * * и * urlencoded * и * multipart. Отдельный модуль 'body-parser' для Express ** 4 ** не выполняет многопроцессорный, только urlencoded и JSON. – mscdex

Смежные вопросы