如何在节点模块中访问具有相对路径的文件?

时间:2016-04-05 18:58:52

标签: javascript node.js file require

我正在node.js + express中构建一个应用程序,我收到了一个文件目录错误。

我的ajax.js文件夹中有一个名为/app/lib/tests的测试文件。我的app.js文件位于我的根/app目录中。这是我的app.js文件的片段,它给了我麻烦:

https.createServer({
    key: fs.readFileSync('./security/keys/localhost.key'),
    cert: fs.readFileSync('./security/keys/localhost.crt')
}, app).listen(https_port);

在我的ajax.js文件中,我需要我的app.js文件:

var server = require('../../app');

这个问题是它给我发现了这个错误:

Error: ENOENT: no such file or directory, open './security/keys/localhost.key'告诉我文件目录没有正确排队。如果我更改

,则我的ajax.js文件有效

Error: ENOENT: no such file or directory, open './security/keys/localhost.key'

Error: ENOENT: no such file or directory, open '../../security/keys/localhost.key'

但是,这会破坏我的整体应用。

有没有办法让app.js的文件目录传播到ajax.js?

提前致谢!

1 个答案:

答案 0 :(得分:3)

使用require.resolve()解析所需模块上下文中的路径,并使用已解析的路径访问文件系统:

https.createServer({
  key: fs.readFileSync(require.resolve('./security/keys/localhost.key')),
  cert: fs.readFileSync(require.resolve('./security/keys/localhost.crt'))
}, app).listen(https_port);