2013-02-23 6 views
6

私のノードアプリケーションでajaxポストの値を取得しようとしています。ガイドとしてthis postを使用して、私はこれまでのところ、これを持っている:ノードでNode.JSでのAJAXポスト変数の読み込み(Express付き)

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

$('#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 

eが呼び出されると、ajaxは成功します。迷っています。私は何かを忘れていますか?

+0

私は同じ問題がある - 'PARAMを使用してみてくださいを( 'postVariableName') ' – fider

答えて

7

reqオブジェクトにはbodyというプロパティがありません。 http://expressjs.com/api.html#req.bodyをご覧ください:

このプロパティは、解析されたリクエスト本文を含むオブジェクトです。この 機能はbodyParser()ミドルウェアによって提供されますが、他の本体 ミドルウェアの解析もこの規則に従うことがあります。 bodyParser()が使用されている場合、このプロパティー のデフォルトは{}です。

だから、あなたはこのようなあなたの明示のwebappにbodyParserミドルウェアを追加する必要があります。

var app = express(); 
app.use(express.bodyParser()); 
+0

ああ、私は何か重要なものがないことを知っていました!しかし、私がこれを含めると、私は「Bad Request:Bad Request」という応答を得るようになりました。これは何らかの形で関連していますか? npmでこれをインストールする必要がありますか? – streetlight

+0

@streetlight:何もインストールする必要はないと思いますが、そのエラーの原因がわかりません。 – thejh

+0

ああ大丈夫、助けてくれてありがとう!このアプリにはほとんど何もないので、この悪い要求で何が起こっているのか分かりません。 – streetlight

6

thejhによって示唆されているように、問題が実際にbodyParserミドルウェアを含むことによって解決されました。

ただ、エクスプレス更新仕様を訪問するように、その答えで提供URLを訪問することを確認します:http://expressjs.com/api.html#req.body

ドキュメントはこの例を提供します(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); 
}) 

を仕事にボディパーサーモジュールを個別にインストールする必要があります

https://www.npmjs.com/package/body-parser

関連する問題