13

これに対する解決策を見つけるために、できる限りあらゆる場所を探しました。私が見つけた唯一のものは、未回答の投稿です。何か見落としがありましたら申し訳ありません。

POST問題は、API で値を取得しようとすると/createQuestion、本文が空/未定義になることです。Cannot read proprety 'question' of undefinedAPI からこのようなエラーが発生します。

エクスプレス API:

app.post("/createQuestion", function(req, res) {
    var questionType = req.body.question.type;
    var questionText = req.body.question.text;
    var questionDuringClass = req.body.question.duringClass;

    // Do a bunch of stuff

    res.send(response);
});

テスト:

    var should = require('should'); 
    var assert = require('assert');
    var request = require('supertest');  
    var winston = require('winston');

    request = request('http://localhost:8080');

        describe('Questions', function() { // Test suite
            before(function(done) {
                done();
            });

        it('Should create a freeResponse question', function(done) { // Test case
        var postData = {
            "question" : {
                "type" : "freeResponse",
                "text" : "This is a test freeResponse question (automated testing)",
                "duringClass" : "1"
            }
        };

        request()
        .post('/createQuestion')
        .send(postData)
        .expect(200)
        .end(function(err, res) { // .end handles the response
            if (err) {
                return done(err);
            }

            done();
        });
    });

 it('Should delete a freeResponse question', function(done) { // Test case
        var postData = {
            "question" : {
                "type" : "freeResponse",
                "text" : "This is a test freeResponse question (automated testing)",
                "duringClass" : "1"
            }
        };

        request()
        .post('/deleteQuestion')
        .send(postData)
        .expect(200)
        .end(function(err, res) { // .end handles the response
            if (err) {
                return done(err);
            }

            done();
        });
    });

私は何が欠けていますか?データを別の形式で.send()送信していますか? リクエストのボディに入れてPOSTいませんか?POST

4

1 に答える 1

30

おそらく、アプリが bodyParser ミドルウェアを適切に使用していない可能性があります。

app.use(express.bodyParser());

Expressjs ドキュメントから:

必須ボディ

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

ここに完全な例があります

var express = require('express');
var request = require('supertest');

var assert = require('assert');
var app = express();

app.use(express.bodyParser());
app.get('/', function(req, res) {
  res.send('ok');
});

app.post('/createQuestion', function(req, res) {
  var message = req.body.partA + ' ' + req.body.partB;
  res.send(message);
});

describe('testing a simple application', function() {
  it('should return code 200', function(done) {
    request(app)
      .get('/')
      .expect(200)
      .end(function(err, res){
        if(err) {
          done(err);
        } else {
          done();
        }
      });
  });

  it('should return the same sent params concatenated', function(done) {
    request(app)
      .post('/createQuestion')
      .send({ partA: 'Hello', partB: 'World'})
      .expect(200, 'Hello World')
      .end(function(err, res){
        if(err) {
          done(err);
        } else {
          done();
        }
      });
  });

});
于 2013-10-25T17:01:03.140 に答える