【发布时间】:2015-09-09 11:25:23
【问题描述】:
我花了半个小时才弄清楚问题是什么,所以我需要发布这个问题以节省您宝贵的时间。
我有一个模式,它的定义如下:
var mongoose = require('mongoose');
var ItemSchema = new mongoose.Schema({
title: String,
desc: String,
price: Number,
owner: { // this field would be filled with req.session.user
uid: {type: Number, index: true},
nickname: String,
contact: String
}
});
module.exports = mongoose.model('ItemSchema', ItemSchema);
然后,如果前端发送一个post请求如下:
console.log( req.body );
/*
{
title: 'apple',
desc: 'nice apple',
price: 100
}
*/
我的 Express 路由器代码,编写:
...
req.body.owner = req.session.user;
var newItem = new ItemSchema( req.body );
newItem.save(function(err, re) {
if (err) throw err;
res.json(re);
});
之后,我的 ItemSchema 添加了一条记录(文档)。但它不包含用户字段,如下所示:
> db.item.findOne();
{
_id: ObjectId('xxxxxxxxxxxxxxxxxxxxxxxx'),
title: 'apple',
desc: 'nice apple',
price: 100
}
太奇怪了!!!用户字段在哪里???
我必须强调,如果 console.log(req.body),它确实包含用户字段。
起初我创建了一个解决方案如下:
req.body.user = {
uid: req.session.user.uid,
nickname: req.session.user.nickname,
contact: req.session.user.contact
}; // It works, but looks stupid
然后我使用下划线:
var newItem = new ItemSchema( _.extend(req.body, {user: req.session.user}) ); // It doesn't work, I don't know why
最后,我发现一定是Mongoose Schema Definition的问题,所以我尝试了:
var ItemSchema = new mongoose.Schema({
title: String,
desc: String,
price: Number,
owner: {type: { // here is the key!!!
uid: {type: Number, index: true},
nickname: String,
contact: String
}}
});
从那以后,再也没有问题,我可以编码了:
req.body.user = req.session.user; // ok
但我发现我之前的定义应该没问题,正如http://mongoosejs.com/docs/guide.html 介绍的那样:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var blogSchema = new Schema({
title: String,
author: String,
body: String,
comments: [{ body: String, date: Date }],
date: { type: Date, default: Date.now },
hidden: Boolean,
meta: { // here, same data structure with my user field
votes: Number,
favs: Number
}
});
那么,问题出在哪里?
【问题讨论】:
标签: node.js express mongoose extend