远程 fs.readFile 的问题? (在本地工作,但不在服务器上)[关闭]

Posted

技术标签:

【中文标题】远程 fs.readFile 的问题? (在本地工作,但不在服务器上)[关闭]【英文标题】:problem with fs.readFile on remote? (works locally but not on server) [closed] 【发布时间】:2019-07-10 17:26:40 【问题描述】:

下面的代码是用于 Discord 机器人的随机报价生成器,为了便于阅读,我的问题是在我的“开发机器”(发烧友/爱好者顺便说一句)上代码运行良好,但是当上传到我的Droplet(ubuntu 18.04,节点v8.15)它什么都不做,甚至没有返回错误。

const fs = require("fs");

exports.run = async (client, message, args) =>  

if (!args || args.length > 0) return message.reply("No need for multiple inputs");

fs.readFile("./quotes.json", "utf8", function(err, data) 
const obj = JSON.parse(data);
const result = obj[Math.floor(Math.random() * obj.length)];


message.channel.send(result.quote);
 );
 ;

当代码位于 droplet 上并且我删除 fs.readfile 和 JSON.parse 块并将回复硬编码到 message.channel.send("it works") 时,它确实会按预期返回消息,我会很感激有人关注事物并建议是代码问题还是服务器配置问题。

下面的工作代码

tbh,我仍然不知道问题出在哪里,所以我在不到 10 分钟的时间内将它全部重写到了一个新文件中。除了添加 __dirname + 之外,我所做的只是更改了一些变量名

fs.readFile(__dirname + "/maiq-quotes.json", "utf8", function(err, data) 

const quotesobj = JSON.parse(data);

var quote = quotesobj[Math.floor(Math.random() * quotesobj.length)];

console.log(quote);
message.channel.send(quote.quote);

);

【问题讨论】:

您似乎已将答案包含在您的问题中。还是你有问题,还是你自己解决了?如果您自己解决了,您应该将答案作为实际答案发布在下面,而不是作为问题的一部分。如果您仍然遇到问题,则不清楚您究竟在寻找什么答案。 @CodyGray 是的,我有,在发布原始帖子后的某个时间(差不多两天),我按照帖子更新中的说明进行了修复。如您所见,代码没有重大变化,服务器上没有任何变化,或多或少用一个新编写的文件修复了自己,即使有问题的文件被多次检查为正确的 ftp 上传格式,lf 换行符等,我做了尝试标记为已回答/已修复,但它不会让您(出于显而易见的原因)接受您自己的答案。 是的,您可以接受自己的答案。甚至鼓励回答你自己的问题。您只需要等待几天才能接受自己的答案。 您可以导入 json 而无需从文件中读取。您可以像这样执行导入语句:const quotes = require('./quotes.json');。这样,您在 var quotes 中有一个已经 json 解析的 json。 【参考方案1】:

没有错误有点奇怪,但是请仔细检查文件是否在正确的位置(如果找不到,则应为此引发错误)并检查文件的权限ls -l

【讨论】:

感谢@Pentium1080Ti 的回复,这是我做的第一件事,事实上我什至从 644 到 755 进行了 chmod。JSON 文件的位置也是正确的。自从我最初发表这篇文章以来,我已经发送了几个其他非常基本的文件,一个是对 txt 文件的简单 fs 读取,然后另一个只是在文件中直接 ping 一条消息,在其中不执行其他代码。 ping 回来的文件有效,另一个带有 txt 文件的简单 fs.readFile 的文件无效。所有其他文件(100 个左右效果很好)。已检查换行符并且是 lf 和所有文件 utf8.. 困惑! 我已经接受了这个作为答案,虽然我确实通过 ftp 反复检查了文件权限、文件编码、换行符和文件上传类型,但发现使用一些非常小的代码创建一个新文件更改(这些更改附加到原始帖子)绝不应该有不同的结果解决了问题。【参考方案2】:

你可能想做:

fs.readFile("./quotes.json", "utf8", function(err, data) 
    if(err) console.log(err);

这样它就会显示错误

【讨论】:

正如我在开篇文章中所说,为了便于阅读,我将其剥离,而我正在运行问题代码,我最初在 if (err) console.error(err) return console.log(data)

以上是关于远程 fs.readFile 的问题? (在本地工作,但不在服务器上)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

nodejs 怎么下载远程文件并该名称

从 fs.readFile 获取数据

在 Node 中使用 fs.readFile 串行读取文件?

如何将使用 fs.readFileSync() 的 Node.js 代码重构为使用 fs.readFile()?

ENOENT:运行 fs.readFile 时没有这样的文件或目录

在循环中使用带有 fs.readFile 的 Promises