0

body-parser ミドルウェアを使用して、 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});

     });

私はajax呼び出しで両方を試しました:

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

また、郵便配達アプリを使用しています。

4

1 に答える 1

0

.use ミドルウェアの順序を変更してみてください。例:

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

この後、json ボディを取得できる場合は、multer なしで試してみてください。

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

Ok。json ボディに私に言わせる場合は、これを試してください。

それでは、これを試してみましょう:

app.use(bodyParser.json({limit:1024*1024, verify: function(req, res, buf){
    try {
        JSON.parse(buf);
    } catch(e) {
        res.send("bad json");
    }
}}));
于 2015-02-12T10:56:45.220 に答える