gpt4 book ai didi

node.js - 请求主体在 super 测试中未定义

转载 作者:行者123 更新时间:2023-12-02 16:26:27 24 4
gpt4 key购买 nike

我正在使用 supertest 测试 Express API。我正在尝试将主体参数传递到测试中,如下面的代码片段所示,但由于我收到主体参数未定义的错误消息,因此主体参数似乎未正确传递。

使用命令 mocha --recursive 运行测试会返回以下错误:

Cannot read property 'email' of undefined

<小时/>

下面是文件 email-suite.js 中引用 supertest 的代码

'use strict';
var express = require("express");
var bodyParser = require('body-parser');
var mongoose = require("mongoose");

var app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
var supertest = require("supertest");
var chai = require("chai");
var should = chai.should();

var api = require("../server.js");

describe("Email Module", function() {
this.timeout(25000);

before(function(done){
mongoose.createConnection(/* connectionstring */);

mongoose.connection.on('open', function(err) {
if(err) console.log(err);
console.log('connected to server');
});

done();
});

it("Check Email Count", function(done) {
var body = { email: "email@email.com" };

supertest(api)
.post("/emailCount")
.set('Accept', 'application/json')
.send(body) // body is undefined
.expect(200)
.expect('Content-Type', /json/)
.end(function(err, res) {
if(err) return done(err);
res.body.count.should.equal(2);
done();
});
});
});
<小时/>

以下是文件 email-api.js 中的代码

'use strict';
var express = require("express");
var bodyParser = require('body-parser');
var router = express.Router();
var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

router.post('/emailCount', function(req, res) {
var email = req.body.email; // req.body is undefined
}

module.exports = router;
<小时/>

下面是文件 server.js 中的代码

var express = require("express");
var app = express();

app.set("port", process.env.PORT || 3000);

var router = require("./user/email-api");

app.use('/', router);

app.listen(app.get("port"), function() {
console.log("App started on port " + app.get("port"));
});

module.exports = app;

最佳答案

body-parser始终放在express object之后和主服务器文件中的每个路由之前

 var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

//路由器任务从这里开始

否则总是会得到未定义,因为首先调用路由器,然后解析主体。

关于node.js - 请求主体在 super 测试中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39470566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com