Node.js 在Mongoose/node中保存对象(默认值)
我将一个对象传递给一个函数,并希望使用这些值保存一个DB条目,并选择一些默认值 实际上 我在Mongoose中有这样一个模式:Node.js 在Mongoose/node中保存对象(默认值),node.js,mongoose,Node.js,Mongoose,我将一个对象传递给一个函数,并希望使用这些值保存一个DB条目,并选择一些默认值 实际上 我在Mongoose中有这样一个模式: var Log = new Schema({ workspaceId : { type: String, index: true }, workspaceName : { type: String, index: true }, loginSession : { type: String, index: true }, loginToken
var Log = new Schema({
workspaceId : { type: String, index: true },
workspaceName : { type: String, index: true },
loginSession : { type: String, index: true },
loginToken : { type: String, index: true },
logLevel : { type: Number, enum:[0,1] },
errorName : { type: String, index: true },
message : { type: String, index: true },
reqInfo : { type: String },
data : { type: String },
loggedOn : { type: Date, index: true },
});
mongoose.model('Log', Log);
要在这张桌子上写东西,我有这样的东西:
exports.Logger = function(logEntry){
var Log = mongoose.model("Log"),
req = logEntry.req;
log = new Log();
// Sorts out log.reqInfo
if ( logEntry.req){
log.reqInfo = JSON.stringify({
info : req.info,
headers: req.headers,
method : req.method,
body :req.body,
route :req.route,
params: req.params
});
} else {
logEntry.reqInfo = {};
}
// Sorts out all of the other fields with sane defaults.
// FIXME: improve this code, it's grown into something ugly and repetitive
log.workspaceId = logEntry.workspaceId ? logEntryworkspaceId. : '';
log.workspaceName = logEntry.workspaceName ? logEntry.workspaceName : '';
log.loginSession = logEntry.loginSession ? logEntry.loginSession : '';
log.loginToken = logEntry.loginToken ? logEntry.loginToken : '';
log.logLevel = logEntry.logLevel ? logEntry.logLevel : 0;
log.errorName = logEntry.errorName ? logEntry.errorName : '';
log.message = logEntry.message ? logEntry.message : '';
log.data = logEntry.data ? logEntry.data : {};
// Sorts out log.loggedOn
log.loggedOn = new Date();
log.save();
}
这是非常糟糕的代码。没有重复的情况下,有什么更好的写作方法呢?像这样的东西可能会更优雅一些: 创建包含默认值的字典
defaults = {
workspaceName: 'foo',
loginSession: 'bar',
loginToken: 'baz'
};
console.log(defaults)
给定一些值
values = {
workspaceName: 'WNAME1',
loginSession: 'LS1',
somethingElse: 'qux'
};
console.log(values)
如果值不包含任何指定默认值的条目,请将默认值添加到值中
for(i in defaults){
if(!values[i]){
values[i] = defaults[i];
}
}
console.log(values)
我不懂你的代码。因此,如果没有设置值,您希望将其设置为空字符串
'
如果您想要默认值,最简单的方法就是在模式中定义它们
var Log = new Schema({
workspaceId : { type: String, index: true, default: 'your default here' },
//...
loggedOn : { type: Date, index: true, default: Date.now }
});
从我只是希望Node准备好了一些东西。。。但显然不是!谢谢,答案已被接受。在jQuery中有一个扩展方法,使合并对象更容易。这有几个节点端口(我没有使用过)。例如。Tilman关于在架构中使用默认值的回答对于特定于mongoose的解决方案可能更好。我使用下划线的u.extend()来实现此目的。请求mongoose解决方案,获取mongoose答案,不接受正确:(被要求改进代码,Mongoose只是我想改进它的原因,如果我想知道如何在Mongoose中执行默认设置,我会有一个不同的标题。我问的是如何改进这段代码,不是为了不改进它。你的问题应该是“如何在javascript中合并对象”真的。。。