2013-02-19 41 views
5

Tôi có mô hình mongoose có liên kết với mô hình người dùng, ví dụ:Chuyển tham số mô hình vào mô hình mongoose

var exampleSchema = mongoose.Schema({ 
    name: String, 
    <some more fields> 
    userId: { type:mongoose.Schema.Types.ObjectId, ref: 'User' } 
}); 

var Example = mongoose.model('Example', userSchema) 

Khi tôi nhanh chóng một mô hình mới tôi làm:

// the user json object is populated by some middleware 
var model = new Example({ name: 'example', .... , userId: req.user._id }); 

constructor của mô hình mất rất nhiều thông số mà đã trở thành tẻ nhạt để viết và cấu trúc lại khi thay đổi sơ đồ. Có cách nào để làm một cái gì đó như:

var model = new Example(req.body, { userId: req.user._id }); 

Hoặc là cách tốt nhất để tạo ra một phương pháp helper để tạo ra một đối tượng JSON hoặc thậm chí gắn userId cho cơ thể yêu cầu? Hoặc là có cách mà tôi thậm chí không nghĩ đến?

Trả lời

7
_ = require("underscore") 

var model = new Example(_.extend({ userId: req.user._id }, req.body)) 

hoặc nếu bạn muốn sao chép userId vào req.body:

var model = new Example(_.extend(req.body, { userId: req.user._id })) 
2

Nếu tôi hiểu bạn một cách chính xác, bạn sẽ được tốt cố gắng như sau:

// We "copy" the request body to not modify the original one 
var example = Object.create(req.body); 

// Now we add to this the user id 
example.userId = req.user._id; 

// And finally... 
var model = new Example(example); 

Ngoài ra, đừng quên thêm các tùy chọn lược đồ{ strict: true }, nếu không bạn có thể đang lưu dữ liệu không mong muốn/kẻ tấn công.

+4

nghiêm ngặt được bật theo mặc định từ mongoose 3. –

+0

Rất vui được biết, cảm ơn mẹo! – gustavohenke

+0

'Object.create' có vẻ không phù hợp ở đây vì nó không sao chép' req.body', nó sử dụng nó như một đối tượng nguyên mẫu. Khá chắc chắn Mongoose sẽ bỏ qua các tính chất của nguyên mẫu. – JohnnyHK

Các vấn đề liên quan