gpt4 book ai didi

node.js - 无法在nodejs中请求文件夹

转载 作者:太空宇宙 更新时间:2023-11-04 03:03:08 27 4
gpt4 key购买 nike

我对此有点困惑。这是我第一次尝试需要一个文件夹而不仅仅是一个 .js 文件。目前该目录中只有一个文件。

文件夹:cfg,文件:config.js(在cfg文件夹中)

这有效:

var file = require('./cfg/config');
console.log(file);

这失败了:

var folder = require('./cfg');
console.log(folder);

出现错误:

Error: Cannot find module './cfg'
at Function.Module._resolveFilename (module.js:557:15)
at Function.Module._load (module.js:484:25)
at Module.require (module.js:606:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (C:\node\prj-node\prj-backend\test.js:3:14)
at Module._compile (module.js:662:30)
at Object.Module._extensions..js (module.js:673:10)
at Module.load (module.js:575:32)
at tryModuleLoad (module.js:515:12)
at Function.Module._load (module.js:507:3)

编辑:(背景)

我正在尝试让 npm 包 generic-rest-api 继续运行 ( https://www.npmjs.com/package/generic-rest-api ) - 以便快速、安全地设置 REST Api 以访问来自 sql server 的数据。

用法是:

var genericRestApi = require('generic-rest-api');app.use(genericRestApi(__dirname+'/models'));

模型目录包含我为sequelize生成的模型。该包给出了同样的错误。

最佳答案

指定目录时require()的加载规则都拼出来了here 。总结一下:

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. let M = X + (json main field)
c. LOAD_AS_FILE(M)
d. LOAD_INDEX(M)
2. LOAD_INDEX(X)

所以,你的代码:

var folder = require('./cfg');

将查找各种内容,但如果在该目录中找不到这些特定选项之一,它将失败。

就您而言,它正在寻找以下文件之一:

./cfg
./cfg.js
./cfg.json
./cfg.node
./cfg/index.js
./cfg/index.json
./cfg/index.node
./cfg/package.json

在所有这些中,. 与您正在执行 require() 的当前模块的加载位置相关。

但是,由于您的文件是 ./cfg/config.js,您可以看到这些规则都不会尝试查找该特定文件。

也许你真正需要的是:

var folder = require('./cfg/config.js');     
<小时/>

好的,现在您已经编辑了问题以更改拼写,这是一个新的摘要:

你说这有效:

var file = require('./cfg/config');
console.log(file);

./cfg 目录加载 config.js。这意味着该文件必须是 ./cfg/config.js。这是符合预期的,因为根据上述规则,它将尝试将 .js 附加到指定的路径以查看它是否是一个文件。

你说这不起作用:

var folder = require('./cfg');
console.log(folder);

这符合预期,因为 Node.js 没有自动规则在目录中查找 config.js,除非有一个 package.json 的 main 规则指向 config.js。

关于node.js - 无法在nodejs中请求文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48998873/

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