【发布时间】:2013-12-16 18:39:28
【问题描述】:
正如标题所示,我在使用 mongoose 保存方法时遇到问题,该方法失败但不会产生错误。
我实际上知道它为什么会失败,这归结为 userId 字段被标记为必需但未提供......但我不知道为什么它不会引发错误。我已经用尽了谷歌和 stackoverflow 来寻找类似的建议,但没有运气,所以把它开放给任何可以帮助我的人!
这是代码...
Model.js
var mongoose = require('mongoose');
var TimeSchema = new mongoose.Schema({
client: String,
matter: String,
activity: String,
tags: String,
description: String,
comments: [String],
startTime: Date,
startTimeUTC: Number,
endTime: Date,
endTimeUTC: Number,
duration: Number,
durationRnd: Number,
durationUnits: Number,
billable: Boolean,
rate: Number,
total: Number,
user: String,
userId: { type: mongoose.Schema.ObjectId, required: true }
}, {safe: true});
mongoose.model("Time", TimeSchema);
Controller.js
exports.addTime = function (req, res) {
console.log('Adding time: ' + JSON.stringify(req.body));
var time = new Time(req.body);
time.save(function (err) {
if (err) { res.send({'error' : err}); }
res.send(time);
});
}
EDIT - 为了阐明回调被调用,以下面的代码为例。
exports.addTime = function (req, res) {
console.log('Adding time: ' + JSON.stringify(req.body));
var time = new Time(req.body);
console.log("time = " + time);
// TODO user
time.save(function (err) {
if (err) { handleError(res, err); }
console.log("ok");
Time.findById(time._id, function (err, found) {
console.log("found = " + found);
});
res.send(time);
});
}
这是控制台输出
Adding time: {"description":"test","client":"","matter":"","activity":"","rate":
"","startTime":"2013-11-30T19:58:43.000Z","startTimeUTC":"1385841523000","endTim
e":"2013-11-30T19:58:45.000Z","endTimeUTC":"1385841525000","startLocale":"19:58"
,"startTimeLocale":"19:58:43","endLocale":"19:58","endTimeLocale":"19:58:45"}
time = { description: 'test',
client: '',
matter: '',
activity: '',
rate: null,
startTime: Sat Nov 30 2013 19:58:43 GMT+0000 (GMT Standard Time),
startTimeUTC: 1385841523000,
endTime: Sat Nov 30 2013 19:58:45 GMT+0000 (GMT Standard Time),
endTimeUTC: 1385841525000,
startTimeLocale: '19:58:43',
endTimeLocale: '19:58:45',
_id: 529a43750a366b6419000001,
comments: [] }
ok
POST /api/times 200 14ms - 313b
found = null
【问题讨论】:
-
听起来像what's happened here。
-
谢谢罗伯特,但肯定会调用回调,我已经调试过并且正在控制台上记录输出。我会更新问题以澄清。
-
您是否测试过
err是否实际上没有使用if (err) console.log(err)之类的东西设置?此外,您应该在调用handleError()后停止处理其余代码(这样做的常用方法类似于if (err) return handleError(...)) -
谢谢罗伯特,你刚刚帮我解决了这个问题,你发现了......错误就在那里,我只是没有正确处理它。我在前端有骨干木偶,它只是添加了模型前端,也许是我的错误处理。我需要单独调查。
标签: javascript node.js mongoose