嵌入文档在 node.js 后变为空
Embedded document becomes null in node.js
我有一个嵌入文档如下:
var artist = new Schema({
name: {
type: String,
trim:true,
required:'Please fill artist name'
},
role : {
type: String,
trim: true,
default: ''
},
isPrimary : {
type: Boolean,
trim: false,
}
});
其他文件如下:
var AlbumSchema = new Schema({
language: {
type: String,
default: '',
trim: true
},
artists: [artist],
title: {
type: String,
default: '',
required: 'Please fill Album title',
trim: true
});
当我发送请求并打印 req.body 值时,我得到的值如下:
{
title: 'Demo Add',
artists:
'[{"name":"Ilesh","role":"Performer","isPrimary":true,"$$hashKey":"ob
ject:227"}]',
language:'EN'
}
但是当我将它转换为
对象时
var album = new Album(req.body);
然后打印相册,结果如下:
{
title: 'Demo Add',
artists: [],
language: 'English'
}
我不知道为什么 artists value 在 case 中变为 null。
编辑:
exports.SaveAlbum = function(req,res){
var album = new Album(req.body);
var data = _.pick(req.body, 'type')
, uploadPath = path.normalize('/album_uploads')
, file = req.files.file;
var user = req.user;
album.cover_art_path = file.path;
if (user) {
var upsertData = album.toObject();
delete upsertData._id;
Album.update({_id: album.id}, upsertData, {upsert: true},function(err)
{
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
}
else {
res.json(album);
}
});
} else {
res.status(400).send({
message: 'User is not signed in'
});
}
};
数组中的 '' 存在问题,如下所述。当按照说明发送 req.body 时,这就是问题所在。
你的req.body是:
{
title: 'Demo Add',
artists: '[{"name":"Ilesh","role":"Performer","isPrimary":true,"$$hashKey":"ob
ject:227"}]',
language:'EN'
}
而且必须是:
{
title: 'Demo Add',
artists: [{"name":"Ilesh","role":"Performer","isPrimary":true,"$$hashKey":"ob
ject:227"}],
language:'EN'
}
这个引号使艺术家成为一个字符串,而不是一个数组,然后在保存时失败。
那么,解决方案是:
var album = new Album(req.body);
album.artists = JSON.parse(req.body.artists);
希望有所帮助。
谢谢
我有一个嵌入文档如下:
var artist = new Schema({
name: {
type: String,
trim:true,
required:'Please fill artist name'
},
role : {
type: String,
trim: true,
default: ''
},
isPrimary : {
type: Boolean,
trim: false,
}
});
其他文件如下:
var AlbumSchema = new Schema({
language: {
type: String,
default: '',
trim: true
},
artists: [artist],
title: {
type: String,
default: '',
required: 'Please fill Album title',
trim: true
});
当我发送请求并打印 req.body 值时,我得到的值如下:
{
title: 'Demo Add',
artists:
'[{"name":"Ilesh","role":"Performer","isPrimary":true,"$$hashKey":"ob
ject:227"}]',
language:'EN'
}
但是当我将它转换为
对象时var album = new Album(req.body);
然后打印相册,结果如下:
{
title: 'Demo Add',
artists: [],
language: 'English'
}
我不知道为什么 artists value 在 case 中变为 null。
编辑:
exports.SaveAlbum = function(req,res){
var album = new Album(req.body);
var data = _.pick(req.body, 'type')
, uploadPath = path.normalize('/album_uploads')
, file = req.files.file;
var user = req.user;
album.cover_art_path = file.path;
if (user) {
var upsertData = album.toObject();
delete upsertData._id;
Album.update({_id: album.id}, upsertData, {upsert: true},function(err)
{
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
}
else {
res.json(album);
}
});
} else {
res.status(400).send({
message: 'User is not signed in'
});
}
};
数组中的 '' 存在问题,如下所述。当按照说明发送 req.body 时,这就是问题所在。
你的req.body是:
{
title: 'Demo Add',
artists: '[{"name":"Ilesh","role":"Performer","isPrimary":true,"$$hashKey":"ob
ject:227"}]',
language:'EN'
}
而且必须是:
{
title: 'Demo Add',
artists: [{"name":"Ilesh","role":"Performer","isPrimary":true,"$$hashKey":"ob
ject:227"}],
language:'EN'
}
这个引号使艺术家成为一个字符串,而不是一个数组,然后在保存时失败。
那么,解决方案是:
var album = new Album(req.body);
album.artists = JSON.parse(req.body.artists);
希望有所帮助。
谢谢