2015-02-12 1 views
0

Я пытаюсь прочитать данные post в Express.js с использованием промежуточного программного обеспечения body-parser. Но получение follwing ошибкаКак читать данные сообщения в Express.js

TypeError: Cannot read property 'text' of undefined 
at /var/www/html/forkom/routes/index.js:49:28 
at callbacks (/var/www/html/forkom/node_modules/express/lib/router/index.js:272:11) 
at param (/var/www/html/forkom/node_modules/express/lib/router/index.js:246:11) 

Мой код-то вроде

var express = require('express'), routes = require('./routes'); 
    var app = express.createServer(); 
    var bodyParser = require('body-parser'); 
    var multer = require('multer'); 
    require('./routes/index')(app); // use route 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'ejs'); 
    app.use(express.static(__dirname + '/public')); 
    app.configure('production', function(){ 
    app.use(express.errorHandler()); 
    app.use(app.router); 
    app.use(bodyParser.json()); // for parsing application/json 
    app.use(bodyParser.urlencoded({ extended: true })); 
    app.use(multer()); // for parsing multipart/form-data 
}); 

И я использую его следующим путем:

app.post('/addComment', function (req, res) { 
     var text = req.body.text; // error on this line 
     res.json({"done":"yes",text:text}); 

    }); 

Я попытался Bothy с Ajax вызова:

$("#postComment").click(function(){ 
      $.ajax({ 
       url:"/addComment", 
       data:{text:$('.text-comment').val()}, 
       type:'POST', 
       dataType:'json', 
       success:function(data){ 
        console.log(data); 
       } 
      }); 
     }); 

и als o использование Postman App.

+0

Как вы размещаете данные? –

+0

см. Отредактированный пост. –

+0

Вы запускаете это в режиме 'production'? Поскольку вы настраиваете это только в процессе производства. Кроме того, попробуйте поместить 'app.use (app.router);' after' app.use (multer()); ' –

ответ

0

Try изменение .use промежуточного порядка, например:

app.use(multer()); // for parsing multipart/form-data 
    app.use(bodyParser.json()); // for parsing application/json 
    app.use(bodyParser.urlencoded({ extended: true })); 

Если не поможет попробовать без multer, если после этого вы можете получить JSon тело сказать мне.

app.use(multer({inMemory: true, onParseEnd: function(req, next){ 
    for(var file in req.files){ 
     if (file != 'archive'){ 
      req.body = JSON.parse(req.files[file].buffer); 
     } 
    } 
    return next(); 
}})); 

ОК. Попробуйте это, если вы скажете мне об этом.

Итак, давайте попробуем это:

app.use(bodyParser.json({limit:1024*1024, verify: function(req, res, buf){ 
    try { 
     JSON.parse(buf); 
    } catch(e) { 
     res.send("bad json"); 
    } 
}})); 
+0

Я тоже пробовал обе последовательности. –

+0

Это тоже не работает для меня. –

+0

ОК, попробуйте подстроить свое тело перед отправкой в ​​ajax JSON.stringify (данные: {текст: $ ('. Text-comment'). Val()}); – siavolt