我刚刚开始使用mean.js并开始构建一个带有一些基本额外属性的自定义文章模块。我正在尝试通过文本输入字段添加在创建表单上添加的标记列表。正如您在下面看到的,当它们刚刚创建时,它可以正常工作。我可以在终端中新创建的文档中看到tags数组。当我加载编辑视图时,tags字段填充了逗号分隔的tags数组元素。这似乎没问题。现在我想简单地在当前的标签之后添加新标签,用逗号分隔每个新标签,并使用新列表更新数组。但是,执行更新后,tags数组元素将更改为包含所有标记的一个长字符串。 我看了一下服务器端的更新功能,但我不太清楚该怎么做才能使它工作。看来这篇文章正在作为一个完整的对象进行更新,所以也许我需要提取标签数组并分别执行推送新标签?任何人都知道我做错了什么?我已经对它进行了一天左右的故障排除了我没有想法。提前谢谢!
新文章的JSON打印:
{
"user" : ObjectId("545db575197ad8a949894a18"),
"desc" : “some description”,
"_id" : ObjectId("546115f20a3048862033d393"),
"created" : ISODate("2014-11-10T19:45:54.079Z"),
"tags" : [
"here”,
"be",
"tags"
],
"name" : "Test”,
"__v" : 0
}
更新后的JSON打印 - 注意:标签现在是一个字符串
{
"__v" : 1,
"_id" : ObjectId("546115f20a3048862033d393"),
"created" : ISODate("2014-11-10T19:45:54.079Z"),
"desc" : "some description",
"name" : "Test",
"tags" : [
"here,be,tags,more"
],
"user" : ObjectId("545db575197ad8a949894a18")
}
//创建新文章
$scope.create = function() {
console.log('Tags before split: ' + this.tags);
var tags = this.tags;
var tags = tags.split(" ");
console.log(“Tags array “ + tags);
// Create new article object
var article = new Article ({
name: this.name,
desc: this.desc,
tags: tags
});
//更新现有文章
$scope.update = function() {
var article = $scope.article;
console.log(“This "
+ article);
article.$update(function() {
$location.path('articles/' + article._id);
}, function(errorResponse) {
$scope.error = errorResponse.data.message;
});
};
在create-article视图中标记输入字段
<div class="form-group">
<label class="control-label" for="tags">Tags</label>
<div class="controls">
<input type="text" data-ng-model="tags" id="tags" class="form-control" placeholder="Tags" required>
</div>
</div>
在更新文章视图中标记输入字段
<div class="form-group">
<label class="control-label" for="tags">Tags</label>
<div class="controls">
<input type="text" data-ng-model="article.tags" id="tags" class="form-control" placeholder="Tags" required>
</div>
</div>
更新文章服务器端控制器
/**
* Module dependencies.
*/
var mongoose = require('mongoose'),
errorHandler = require('./errors.server.controller'),
Article = mongoose.model('Article'),
_ = require('lodash');
exports.update = function(req, res) {
var article = req.article;
article = _.extend(article , req.body);
article.save(function(err) {
if (err) {
return res.status(400).send({
message: errorHandler.getErrorMessage(err)
});
} else {
res.jsonp(article);
}
});
};
文章模型
var ArticleSchema = new Schema({
name: {
type: String,
default: '',
required: 'Please fill Article name',
trim: true
},
desc: String,
tags: [String],
created: {
type: Date,
default: Date.now
},
user: {
type: Schema.ObjectId,
ref: 'User'
}
});
mongoose.model('Article', ArticleSchema);
答案 0 :(得分:0)
您需要在更新之前拆分标记,就像在create函数中一样。