我正在尝试将json数组存储到变量,但是node.js返回此错误:{ Error: Cannot find module 'jokes.json'
这是我的代码:
let jsonData = require('jokes.json');
var jokes = jsonData.jokes;
jokes.json文件与javascript文件位于同一目录
答案 0 :(得分:1)
如果要导入自定义模块或文件,则必须以以下方式(使用相对路径)要求它
let jsonData = require('./jokes.json');
对于系统模块,您可以通过这种方式导入const express = require('express')
如果您在ur文件夹名称express中创建另一个模块,并且如果您需要这种方式
const express = `require('./express')`
它将找到您的自定义express.js文件而不是express
模块
答案 1 :(得分:1)
如果您只想快速获得答案,则需要更改为:
let jsonData = require('./jokes.json');
指示nodejs模块加载器在当前模块的目录中查找jokes.json
。是的,这对于一个node.js新手来说有点令人惊讶,但是有一种疯狂的方法(见下文)。
此处描述了通过相对路径加载模块的所有规则:https://nodejs.org/api/modules.html#modules_all_together。我真的建议阅读。
为了便于讨论,我将在此处包括一部分:
require(X) from module at path Y
1. If X is a core module,
a. return the core module
b. STOP
2. If X begins with '/'
a. set Y to be the filesystem root
3. If X begins with './' or '/' or '../'
a. LOAD_AS_FILE(Y + X)
b. LOAD_AS_DIRECTORY(Y + X)
4. LOAD_NODE_MODULES(X, dirname(Y))
5. THROW "not found"
LOAD_AS_FILE(X)
1. If X is a file, load X as JavaScript text. STOP
2. If X.js is a file, load X.js as JavaScript text. STOP
3. If X.json is a file, parse X.json to a JavaScript Object. STOP
4. If X.node is a file, load X.node as binary addon. STOP
LOAD_INDEX(X)
1. If X/index.js is a file, load X/index.js as JavaScript text. STOP
2. If X/index.json is a file, parse X/index.json to a JavaScript object. STOP
3. If X/index.node is a file, load X/index.node as binary addon. STOP
LOAD_AS_DIRECTORY(X)
1. If X/package.json is a file,
a. Parse X/package.json, and look for "main" field.
b. If "main" is a falsy value, GOTO 2.
c. let M = X + (json main field)
d. LOAD_AS_FILE(M)
e. LOAD_INDEX(M)
f. LOAD_INDEX(X) DEPRECATED
g. THROW "not found"
2. LOAD_INDEX(X)
LOAD_NODE_MODULES(X, START)
1. let DIRS = NODE_MODULES_PATHS(START)
2. for each DIR in DIRS:
a. LOAD_AS_FILE(DIR/X)
b. LOAD_AS_DIRECTORY(DIR/X)
NODE_MODULES_PATHS(START)
1. let PARTS = path split(START)
2. let I = count of PARTS - 1
3. let DIRS = [GLOBAL_FOLDERS]
4. while I >= 0,
a. if PARTS[I] = "node_modules" CONTINUE
b. DIR = path join(PARTS[0 .. I] + "node_modules")
c. DIRS = DIRS + DIR
d. let I = I - 1
5. return DIRS
由于require('jokes.json')
并非以/
或.
开头,因此您的require()
语句转到此:
4. LOAD_NODE_MODULES(X, dirname(Y))
然后调用
NODE_MODULES_PATHS(START)
生成搜索路径列表,其中包括目录名称,从该目录名称中加载当前脚本,并带有附加的“ / node_modules”子目录(任何全局模块安装位置)。它不会包含当前模块的加载目录。