gpt4 book ai didi

node.js - 服务器作为 linux 服务启动时 readFileSync 抛出错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:44:06 27 4
gpt4 key购买 nike

我正在尝试使用在 digital ocean 上运行的 Node/快速服务器为自己制作一个简单的 api。在服务器文件中我有这样的东西:

var data = fs.readFileSync('path/to/data.json','utf8');

当我从 cmd 行手动启动服务器时,它工作得很好

node server

但我设置的是一个 linux 服务,这样每次我重新启动我的 digital ocean 机器时,它都会自动启动服务器,该服务(保存在 etc/init/中)如下所示:

start on filesystem and started networking
respawn
exec node /path/to/server.js

问题是,当我向运行 readFileSync 调用的服务器发出请求时,如果服务器是从 cmd 行手动启动的,它工作正常,但是当服务器是通过服务启动时,readFileSync 抛出以下内容错误:

Error: ENOENT, no such file or directory 'path/to/data.json'
at Error (native)
at Object.fs.openSync (fs.js:500:18)
at Object.fs.readFileSync (fs.js:352:15)

文件和目录确实存在(如果我直接在浏览器中请求 data.json 文件,我可以看到它)

我错过了什么?将服务器作为与使用 readFileSync 冲突的服务启动有什么问题吗?有没有其他方法可以解决我正在尝试做的事情?我应该使用某种请求/获取资源模块来访问该 json 文件吗?

最佳答案

您使用的是相对路径,但进程并未从您认为的位置开始。不要使用相对路径,而是使用绝对路径。

所以如果你的布局看起来像:

server.jspath/  to/    data.json

Then inside your server.js, you can just do something like:

var path = require('path');

// ...

var data = fs.readFileSync(path.join(__dirname, 'path/to/data.json'), 'utf8');

关于node.js - 服务器作为 linux 服务启动时 readFileSync 抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39301903/

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