【问题标题】:Add fields to Keystone.js Model Class using json file使用 json 文件向 Keystone.js 模型类添加字段
【发布时间】:2015-01-12 13:59:53
【问题描述】:

我想知道是否可以在 Keystone.js 中使用保存在 json 文件中的信息将字段添加到集合中。 我会告诉你我的问题:

而不是

Collection.add({
    aaa: {
        type: String,
        required: false
    },
    bbb: {
        type: String,
        required: false
    },
    ccc: {
        type: String,
        required: false
    }
}); // this works!

我想这样添加字段:

json_model = require(process.env.PWD + process.env.JSON_MODELS +'/collection.json'),   //path of json file
var tmp_json = modelFromJsonFunc.json4model(json_model);
Projects.add(tmp_json);

输出是

{
    aaa: {
        type: String,
        required: false
    },
    bbb: {
        type: String,
        required: false
    },
    ccc: {
        type: String,
        required: false
    }
}

                                                     ...

使用 mongo shell 我看到这个集合没有字段! 为什么不起作用? 感谢您的帮助。

【问题讨论】:

  • keystone 在后台使用 mongoose,因此您可以搜索 mongoose stackoverflow.com/questions/8504446/… 的答案
  • @HarryMoreno 上面的评论是绝对正确的。他推荐的问题的答案适用于 Mongoose 模式,但没有考虑 Keystone 类型。

标签: json model keystonejs


【解决方案1】:

@Michele 如果按照您声称的方式运行示例中的代码,您将不会获得没有字段的集合,您会收到错误消息。

在以下代码行中:

json_model = require(process.env.PWD + process.env.JSON_MODELS +'/collection.json'),   //path of json file

require() 使用JSON.parse() 评估.json 文件。您在上面显示的内容无效JSON,会导致错误。

由于架构包含数据类型,其中一些特定于 Keystone,因此需要将文件评估为 JavaScript 而不是 JSON。一种可能的方法是读取您的 .json 文件,将其包装在一个 IIFE 中,该 IIFE 返回从 .json 文件读取的数据,使用 eval() 对其进行解析,然后返回结果。

这是我将如何做的一个例子......

requireJsonSchema.js

var keystone = require('keystone'),
    Types = keystone.Field.Types,
    fs = require('fs'),
    path = require('path');

module.exports = function (pathname) {
    try {
        var data = fs.readFileSync(pathname);
        return eval('(function() { return ' + data + '; })();');
    } catch(e) {
        return {};
    }
}

Test.js

var keystone = require('keystone'),
    Types = keystone.Field.Types,
    requireJsonSchema = require('/path/to/requireJsonSchema'),

var Test = new keystone.List('Test');
var jsonSchema = requireJsonSchema('/path/to/Test.json');

Test.add(jsonSchema);

Test.register();

【讨论】:

    猜你喜欢
    • 2014-09-15
    • 2014-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 2010-10-24
    • 1970-01-01
    相关资源
    最近更新 更多