2015-04-06 52 views
1

我在超級帖子發送請求正文時遇到了很多麻煩。我已閱讀其他問題的解決方案,這些問題歸咎於不正確的body-parser配置,但這些答案指的是自定義數據類型。 (res.body is empty in this test that uses supertest and Node.js)。我身上配置的解析器是這樣的:supertest請求與應用程序/ vnd的空身

var bodyParser = require('body-parser'); 
app.use(bodyParser.json({ limit: '50mb', type: 'application/vnd.api+json' })); 
app.use(bodyParser.urlencoded({limit: '50mb', extended: true})); 

該解決方案我提供的帖子中寫道:「supertest使用this文件,以確定是否要發送JSON或不是。」我的內容類型實際上列在那裏,所以我不明白爲什麼這應該是一個問題。

我嘗試發佈的請求,像這樣:

it ('creates user', function (done) { 
    var user = { 
     firstname: 'Joe', 
     lastname: 'JoeJoe', 
     email: '[email protected]', 
     password: 'spartacus', 
    }; 

    request(app) 
     .post('/api/users') 
     .send(user) 
     .expect(200) 
     .expect('Sent email to [email protected]', done) 
    }); 
}); 

我導入我的應用程序這一行:

var app = require('../server.js'); 

凡server.js完全配置我的應用程序。 supertest支持這種應用程序類型嗎?有沒有辦法強制用戶數據作爲req.body的一部分被注意到?

+0

不要忘記發送的Content-Type頭「應用/ vnd.api + JSON」 – lxe

+0

你能解釋一下在哪裏設置? – ritmatter

+0

'request(app) .post('/ api/users',{headers:{'content-type':'application/vnd.api + json'}})' – lxe

回答

0

我相信這個問題可以通過將您的post請求上的content-type標題設置爲application/vnd.api+json來解決。您可以在supertest/SuperAgent的這樣做如下:

it ('creates user', function (done) { 
    var user = { 
     firstname: 'Joe', 
     lastname: 'JoeJoe', 
     email: '[email protected]', 
     password: 'spartacus', 
    }; 

    request(app) 
     .post('/api/users') 
     .set('Content-Type', 'application/vnd.api+json') 
     .send(user) 
     .expect(200) 
     .expect('Sent email to [email protected]', done) 
    }); 
});