【问题标题】:How to dynamically import data in a nodejs app?如何在 nodejs 应用程序中动态导入数据?
【发布时间】:2019-04-19 23:43:10
【问题描述】:

我想在带有 typescript 的 node/express 应用程序中使用 require 来导入 json。我试过这样:

const url = `./data/${resource}.json`;
const data = require(url);

但我收到错误 Cannot find module './data/my-data.json'。

我想使用 require 而不是 import 以便根据资源变量的值动态创建数据变量。

【问题讨论】:

  • 问题的最可能原因是 JSON 文件相对于调用代码的文件路径。您可以验证并发布目录结构吗?

标签: node.js json typescript express ejs


【解决方案1】:
const path = require('path');
const url = path.resolve(__dirname, `./data/${resource}.json`);   
const data = require(url);

【讨论】:

  • 虽然此代码 sn-p 可能是解决方案,但包含解释确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
【解决方案2】:

require关键字是nodejs中的一个特殊关键字。它用于加载模块,并且由于您的 json 文件不是模块,因此会出现错误。试试这个,这样你就可以动态加载你的json了。

import fs from 'fs';
const file = fs.readFileSync(`./data/${resource}.json`).toString();
const data = JSON.parse(file);

这个函数可能有更好的写法,关于fs模块的阅读模式here.


编辑:正如有人已经指出的那样,实际上可以动态地require json 文件。方法如下,

import path from 'path';
const uri = path.resolve(__dirname, `<path_to_json_file>`);   
const data = require(uri);

但是,作为标准做法,使用fs 模块将静态资产加载到您的项目中。

【讨论】:

    【解决方案3】:

    import fs from 'fs';
    
    const file = fs.readFileSync(`./data/${resource}.json`).toString();
    const data = JSON.parse(file);

    【讨论】:

    • 这个答案不仅不正确,而且模仿了 10 小时前给出的答案
    猜你喜欢
    • 1970-01-01
    • 2012-02-23
    • 2021-05-11
    • 1970-01-01
    • 2013-03-06
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    相关资源
    最近更新 更多