使用json文件向Keystone.js模型类添加字段

使用json文件向Keystone.js模型类添加字段,json,model,keystonejs,Json,Model,Keystonejs,我想知道是否可以使用json文件中保存的信息在Keystone.js中向集合添加字段。 我会告诉你我的问题: 而不是 Collection.add({ aaa: { type: String, required: false }, bbb: { type: String, required: false }, ccc: { type: String, requi

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

而不是

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,我看到这个集合没有字段! 为什么不起作用?
谢谢您的帮助。

@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返回从.jsonfile读取的数据,使用eval对其进行解析,然后返回结果

这里有一个我将如何做的例子

requireJsonSchema.js

Test.js


keystone在引擎盖下使用mongoose,因此您可以搜索mongoose@HarryMoreno的答案,上面的评论绝对正确。他推荐的问题的答案适用于Mongoose模式,但没有考虑Keystone类型。
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 {};
    }
}
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();