Express req.ip返回对象



我有一个快递应用程序:

const express = require('express');
const app = express();
const cors = require('cors');
app.use(cors({ optionsSuccessStatus: 200 }));
app.get('/api/whoami', (req, res) => {
const ipaddress = req.ip;
res.status(200).json({ ipaddress });
});

app.listen(process.env.PORT || 3000);    
module.exports = app;

和一个测试文件:

const chai = require('chai');
const chaiHttp = require('chai-http');
const chaiMatch = require('chai-match');
const { describe, it } = require('mocha');
const server = require('../../server');
const should = chai.should();
const { expect } = chai;
chai.use(chaiHttp);
chai.use(chaiMatch);
describe('/GET /api/whoami', () => {
it('should return the IP address', (done) => {
chai.request(server)
.get('/api/whoami')
.end((err, res) => {
res.should.have.status(200);
res.body.should.be.a('object');
res.body.should.have.property('ipaddress');
expect(res.body.ipaddress).should.match(/* very long regex */);
done();
});
});
});

出于某种原因,我一直在获取Uncaught AssertionError: expected Assertion{ __flags: { …(4) } } to match [my very long regex],我没有发现任何人有同样的错误。我怎样才能用快递获得我的真实ip?或者测试它的正确方法是什么?

语法是expect(something).to.match而不是expect(something).should.match。请参阅文档。或者,如果要使用should,则不需要expect,因为它的语法是something.should.match

因此,修复方法是更改您的代码,如下所示:

expect(res.body.ipaddress).to.match(/* very long regex */);

或如下:

res.body.ipaddress.should.match(/* very long regex */);

在样式指南中,您可以很好地比较如何使用expect和如何使用should

通过混合这两种东西,您获得了expect(...),它返回包含类似to的东西的对象,并将其用作should的源,因此should.match检查操作的是expect(...)返回的对象,而不是IP地址本身。

相关内容

  • 没有找到相关文章

最新更新