gpt4 book ai didi

javascript - 读取包含 Node.JS 中对象的 JS 文件

转载 作者:太空宇宙 更新时间:2023-11-04 02:32:48 25 4
gpt4 key购买 nike

我有一个JS文件,其中有很多对象;我想在 Node.Js 中读取此文件并循环访问对象。 JS 文件如下所示:

User = {
fields: {
name: {
type: "STRING"
},
id: {
type: "integer"
},
password: {
type: "STRING"
}
}
};

car = {
fields: {
model: {
type: "STRING"
},
color: {
type: "STRING"
}

}
};

我尝试了以下方法,但不起作用:

var Model = fs.readFileSync("Model.js");
data_test = JSON.stringify(Model);
response.send(data_test);

最佳答案

Also, your approach gave me the following error: "SyntaxError: Unexpected token = at Module._compile (module.js:439:25) at requireFromString"

对 @James 的答案稍作调整应该可以解决问题:

function requireFromString(src, filename) {
var Module = module.constructor;
var m = new Module();
m._compile(src, filename);
return m.exports;
}
var moduleStr = fs.readFileSync("Model.js");
//moduleStr = 'module.exports = {' + moduleStr + '}';
moduleStr = moduleStr + '\nmodule.exports = { User: User, car: car };';
response.send(requireFromString(moduleStr));
<小时/>

说明:

正如其他人评论的那样,有效的 JSON !== 有效的 Javascript;如果一个文件在浏览器中加载,则意味着它是有效的 Javascript,但不一定是有效的 JSON。

本质上,您想要做的就是在 NodeJs 中加载 Javascript 文件。不幸的是,NodeJs 在加载不同文件并管理它们之间的依赖关系时使用不同的系统。在浏览器中,它是基于先到先得的原则。本质上,变量是按照文件加载的顺序创建的。

在 NodeJs OTOH 中,您指定单个 Javascript 文件作为入口点,该文件应该“require()”它需要的任何其他 Javascript 文件。每个文件导出的内容就是require-ing文件看到的内容。

tl;dr 浏览器和 NodeJ 以不兼容的方式加载 Javascript 文件。

那么,你如何解决你的问题呢?James 的解决方案提供了一种编译 NodeJs 模块的方法手动,通过编译字符串。

这很棒,除了修改字符串以导出文件中的内容之外根本不会产生有效的 Javascript:

module.exports = { foo = 'bar'; }

我的解决方案所做的是这样的,它会产生有效的 Javascript:

foo = 'bar';
module.exports = { foo: foo };

关于javascript - 读取包含 Node.JS 中对象的 JS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25026115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com