ノードアプリケーションでajaxポストに送信する値を取得しようとしています。 この投稿 をガイドとして使用して、これまでのところこれを持っています:
ノード内:
var express = require('express');
var app = express();
var db = require('./db');
app.get('/sender', function(req, res) {
res.sendfile('public/send.html');
});
app.post('/send_save', function(req, res) {
console.log(req.body.id)
console.log(req.body.title);
console.log(req.body.content);
res.contentType('json');
res.send({ some: JSON.stringify({response:'json'}) });
});
app.listen(3000);
AJAX側:
$('#submit').click(function() {
alert('clicked')
console.log($('#guid').val())
console.log($('#page_title').val())
console.log($('#page-content').val())
$.ajax({
url: "/send_save",
type: "POST",
dataType: "json",
data: {
id: $('#guid').val(),
title: $('#page_title').val(),
content: $('#page-content').val()
},
contentType: "application/json",
cache: false,
timeout: 5000,
complete: function() {
//called when complete
console.log('process complete');
},
success: function(data) {
console.log(data);
console.log('process sucess');
},
error: function() {
console.log('process error');
},
});
})
この問題は、req.body.id(およびタイトルやコンテンツのような他の値)ができないことです。ノードで次のエラーが発生します。
TypeError: Cannot read property 'id' of undefined
私がそれらのコメントをコメントアウトすれば、ajaxは成功しています。迷っています。何か忘れてる?
存在するreq
オブジェクトにはbody
プロパティがありません。 http://expressjs.com/api.html#req.body を見てください:
このプロパティは、解析されたリクエスト本文を含むオブジェクトです。この機能はbodyParser()ミドルウェアによって提供されますが、他のボディ解析ミドルウェアもこの規則に従う場合があります。 bodyParser()を使用すると、このプロパティのデフォルトは{}になります。
したがって、次のようにbodyParserミドルウェアをExpress Webアプリケーションに追加する必要があります。
var app = express();
app.use(express.bodyParser());
問題は確かに、thejhによって提案されたbodyParserミドルウェアを含めることで解決されました。
Expressの更新された仕様にアクセスするには、その回答で提供されているURLにアクセスしてください: http://expressjs.com/api.html#req.body
ドキュメントはこの例を提供します(Express 4.x):
var app = require('express')();
var bodyParser = require('body-parser');
var multer = require('multer');
app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
app.use(multer()); // for parsing multipart/form-data
app.post('/', function (req, res) {
console.log(req.body);
res.json(req.body);
})
これを機能させるには、body-parserモジュールを個別にインストールする必要があります。