在 express 中返回时 mongoose 中的 _id 类型错误 api
Type of _id in mongoose wrong when returning in express api
我已经设置了一个简单的测试(mocha 和 should),我正在测试我保存的报告是否与我得到的报告相同。我更喜欢使用 deep.equal 但由于 _id 不等于我卡住了。
var report = new Report();
describe('GET:id /api/reports', function () {
beforeEach(function (done) {
report.save(function (err, result) {
if (err) return (done(err));
result._id.should.eql(report._id);
done();
});
});
afterEach(function (done) {
Report.remove().exec().then(function () {
done();
});
});
before(function (done) {
Report.remove().exec().then(function () {
done();
});
});
it('should respond with the same report saved', function (done) {
request(app)
.get('/api/reports/' + report._id)
.expect(200)
.expect('Content-Type', /json/)
.end(function (err, res) {
if (err) return done(err);
console.log(JSON.stringify(res.body));
console.log(JSON.stringify(report));
res.body._id.should.equal(report._id);
done();
});
});
});
我得到的输出是
{"_id":"55282d42cb39c43c0e4421e1","__v":0}
{"__v":0,"_id":"55282d42cb39c43c0e4421e1"}
1) GET:id /api/reports should respond with the same report saved:
Uncaught AssertionError: expected '55282d42cb39c43c0e4421e1' to be 55282d42cb39c43c0e4421e1
如果我改为使用 == 它工作正常
(res.body._id == report._id).should.equal(true);
我最终想要的是 res.body(或与此相关的其他内容)与初始报告的深度相等。
假设您是 /api/reports/:id
的 Express 路由处理程序,使用 res.json()
发送 Report
,猫鼬文档的问题是 "stringified"。当 mongoose 文档被字符串化时,ObjectIds 被类型转换为字符串,当解析回一个对象时,它不会自动转换回 ObjectIds。
因此,如果您想要 "deep equal" 原始 Report
文档和 Express 退回的文档,您需要将其提交给同一个 "conversion process"。断言看起来像这样。
res.body.should.eql(JSON.parse(JSON.stringify(report)));
希望这对你有用。
我已经设置了一个简单的测试(mocha 和 should),我正在测试我保存的报告是否与我得到的报告相同。我更喜欢使用 deep.equal 但由于 _id 不等于我卡住了。
var report = new Report();
describe('GET:id /api/reports', function () {
beforeEach(function (done) {
report.save(function (err, result) {
if (err) return (done(err));
result._id.should.eql(report._id);
done();
});
});
afterEach(function (done) {
Report.remove().exec().then(function () {
done();
});
});
before(function (done) {
Report.remove().exec().then(function () {
done();
});
});
it('should respond with the same report saved', function (done) {
request(app)
.get('/api/reports/' + report._id)
.expect(200)
.expect('Content-Type', /json/)
.end(function (err, res) {
if (err) return done(err);
console.log(JSON.stringify(res.body));
console.log(JSON.stringify(report));
res.body._id.should.equal(report._id);
done();
});
});
});
我得到的输出是
{"_id":"55282d42cb39c43c0e4421e1","__v":0}
{"__v":0,"_id":"55282d42cb39c43c0e4421e1"}
1) GET:id /api/reports should respond with the same report saved:
Uncaught AssertionError: expected '55282d42cb39c43c0e4421e1' to be 55282d42cb39c43c0e4421e1
如果我改为使用 == 它工作正常
(res.body._id == report._id).should.equal(true);
我最终想要的是 res.body(或与此相关的其他内容)与初始报告的深度相等。
假设您是 /api/reports/:id
的 Express 路由处理程序,使用 res.json()
发送 Report
,猫鼬文档的问题是 "stringified"。当 mongoose 文档被字符串化时,ObjectIds 被类型转换为字符串,当解析回一个对象时,它不会自动转换回 ObjectIds。
因此,如果您想要 "deep equal" 原始 Report
文档和 Express 退回的文档,您需要将其提交给同一个 "conversion process"。断言看起来像这样。
res.body.should.eql(JSON.parse(JSON.stringify(report)));
希望这对你有用。