Node.js 如何向jugglingdb中的模型添加自定义属性并通过JSON返回
如何将自定义特性添加到模型中?我想定义一个自定义属性,而不是自定义方法,因为我想将它返回给客户机 下面是一个使用无处不在的Post模型的示例: db/schema.js:Node.js 如何向jugglingdb中的模型添加自定义属性并通过JSON返回,node.js,compoundjs,jugglingdb,Node.js,Compoundjs,Jugglingdb,如何将自定义特性添加到模型中?我想定义一个自定义属性,而不是自定义方法,因为我想将它返回给客户机 下面是一个使用无处不在的Post模型的示例: db/schema.js: var Post = schema.define('Post', { title: { type: String, length: 255 }, content: { type: Schema.Text }, date: { type: Date, default: func
var Post = schema.define('Post', {
title: { type: String, length: 255 },
content: { type: Schema.Text },
date: { type: Date, default: function () { return new Date;} },
timestamp: { type: Number, default: Date.now },
published: { type: Boolean, default: false, index: true }
});
app/models/post.js:
var moment = require('moment');
module.exports = function (compound, Post) {
// I'd like to populate the property in here.
Post.prototype.time = '';
Post.prototype.afterInitialize = function () {
// Something like this:
this.time = moment(this.date).format('hh:mm A');
};
}
我想在app/controllers/posts_controller.js中同样返回它:
action(function index() {
Post.all(function (err, posts) {
// Error handling omitted for succinctness.
respondTo(function (format) {
format.json(function () {
send({ code: 200, data: posts });
});
});
});
});
预期成果:
{
code: 200,
data: [
{
title: '10 things you should not do in jugglingdb',
content: 'Number 1: Try to create a custom property...',
date: '2013-08-13T07:55:45.000Z',
time: '07:55 AM',
[...] // Omitted data
},
[...] // Omitted additional records
}
我在app/models/post.js中尝试过的东西:
var moment = require('moment');
module.exports = function (compound, Post) {
// I'd like to populate the property in here.
Post.prototype.time = '';
Post.prototype.afterInitialize = function () {
// Something like this:
this.time = moment(this.date).format('hh:mm A');
};
}
尝试1:
Post.prototype.afterInitialize = function () {
Object.defineProperty(this, 'time', {
__proto__: null,
writable: false,
enumerable: true,
configurable: true,
value: moment(this.date).format('hh:mm A')
});
this.__data.time = this.time;
this.__dataWas.time = this.time;
this._time = this.time;
};
这将通过component c
在控制台中返回post.time,但不能在post.toJSON()上返回
尝试2:
Post.prototype.afterInitialize = function () {
Post.defineProperty('time', { type: 'String' });
this.__data.time = moment(this.date).format('hh:mm A');
};
这一尝试很有希望……它通过.toJSON()
提供了预期的输出。然而,正如我担心的那样,它也试图用该字段更新数据库。目前存在一个小范围问题,将阻止打印值(它将仅显示时间:
),但我已经继续并为此提出了拉取请求
否则,在初始化后省略上的原型部分是成功的:
Post.afterInitialize = function () {
this.time = moment(this.date).format('hh:mm A'); // Works with toJSON()
this.__data.time = this.time; // Displays the value using console c
};