我最近不得不将一个使用 ASP.NET Core 1.0 完成大量工作的项目转换为 Node.js。我完全脱离了自己的舒适区,对 JavaScript 几乎一无所知,并且享受了 ASP 为我序列化 C# 类而不必自己处理 JSON 的美好生活。 Node 希望我自己做 JSON,但我对此感到很不舒服。
这是一款健身应用。您的客户在电梯等方面取得了一些进展。在 C# 中,它位于 Workouts 对象中,如下所示:
public struct Progress
{
public Workout[] Workouts;
}
锻炼是一个可重复使用的对象,包含计时、组数、重复次数等所有好东西。我可以在每个需要它的模式中重写 Workouts 对象,但一定有更好的方法吗?我读过一些有关 $schema
和 $ref
的内容,但不熟悉如何使用它们,或者这是否是这些关键字的正确应用。
最后,我如何定义这个自定义 Workout 对象的数组?
这是我的 JSON 对象和到目前为止 client.js
的内容。进步是我最希望实现的目标。
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ClientSchema = new Schema({
measurements: [{
height: Number,
weight: Number
}],
personal_information: [{
birthday: Date,
gender: String
}],
contact_information: [{
phone: String,
email: String
}],
progress: [{
workouts: WorkoutList
}]
});
最佳答案
如果您只想要一个可用于各种其他模型的通用数据结构,那么您可以创建 sub-doc schema (可能有也可能永远不会有自己的模型)将被各种其他模式使用。
注意:这提供了一个单例模式对象,这意味着如果您要修改一个模型,它将传播到以后使用它的任何其他模型。如果这是一个问题,那么您可以将 workout-list-schema.js
转换为工厂函数,每次都会返回一个新的架构对象。
workout-list-schema.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var WorkoutListSchema = module.exports.WorkoutListSchema = new Schema({
// some schema
});
client-schema.js
var mongoose = require('mongoose');
var WorkoutListSchema = require('./workout-list-schema').WorkoutListSchema;
var Schema = mongoose.Schema;
var ClientSchema = new Schema({
measurements: [{
height: Number,
weight: Number
}],
personal_information: [{
birthday: Date,
gender: String
}],
contact_information: [{
phone: String,
email: String
}],
progress: [{
workouts: WorkoutListSchema
}]
});
关于javascript - JSON (node/express) 和 JSON 数组中的自定义 "types",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38908738/