我正在尝试在FS.Collection中插入后保存图像ID。
var item = {
name: $(value).find('#name').val(),
article: $(value).find('#article').val(),
description: $(value).find('#description').val(),
price: $(value).find('#price').val(),
sizes: $(value).find('#sizes').val()
};
file = $(value).find('#attachmentName')[0].files[0];
if (file !== undefined) {
Images.insert(file, function (err, fileObj) {
item = _.extend(item, {
image: fileObj._id.toString()
});
});
}
Meteor.call('collectionInsert', item, function(error, result) {
if (error)
return alert(error.reason);
Router.go('collection', {_id: result._id});
});
Meteor.methods({
collectionInsert: function(postAttributes) {
check(Meteor.userId(), String);
check(postAttributes, {
name: String,
article: String,
description: String,
price: String,
sizes: String,
image: String
});
var user = Meteor.user();
var post = _.extend(postAttributes, {
userId: user._id,
author: user.profile.name,
timestamp: new Date(),
views: 0
});
var collectionId = Collections.insert(post);
return {
_id: collectionId
};
}
});
然后我有异常
Exception while invoking method 'collectionInsert' Error: Match error: Missing key 'image'
在控制台日志中,我有项目值
...
image: "4J55dyGb5DpqbCXGG"
...
我正在尝试将check属性更改为 image:Match.Optional([String])和 image:Match.Any - 没有效果
答案 0 :(得分:0)
我认为这里的问题是你的插入方法是非阻塞的,这意味着在将它传递给方法调用之前你可能还没有收到fileObj
或扩展item
。也许你应该尝试在insert回调中调用方法,如下所示:
if (file !== undefined) {
Images.insert(file, function (err, fileObj) {
item.image = fileObj._id.toString(); // don't need _.extend
// item should now be extended
Meteor.call('collectionInsert', item, function(error, result) {
if (error)
return alert(error.reason);
Router.go('collection', {_id: result._id});
});
});
}
顺便说一下,你应该存储$(value)
的结果,而不是一遍又一遍地构造相同的jQuery对象。只是一个小的优化,但仍然提高了可读性。
var $value = $(value);
var item = {
name: $value.find('#name').val(),
...
};