Node.js: EBADF,坏的文件描述符

14

如果我使用浏览器的重新加载按钮频繁地重新加载我的应用程序,比如 每10秒50次,那么就会出现以下错误:

events.js:45
    throw arguments[1]; // Unhandled 'error' event
                   ^
Error: EBADF, Bad file descriptor

我认为这可能是带宽错误或类似的问题。最初,当我使用HTML 5音频API时出现了这个错误。如果我连续加载10-15次音频文件,那么就会出现这个错误。但现在我发现即使没有使用音频API,在重新加载网站多次后也会出现这个错误,而且Safari比Chrome更快地给出了这个错误(真的是什么鬼?)

我正在使用Node.js 0.4.8与express+jade,并且还使用db-mysql模块连接到MySQL数据库。

我在网上找不到任何有关这个主题的文章可以帮助我,所以请告诉我可能导致这个错误的原因,因为这真的很令人困惑:(

3个回答

7
"重新加载您的应用程序"是指从浏览器刷新应用程序的主页,还是实际停止并重新启动node.js服务器进程?我假设是前者,在这种情况下,如果您无法可靠地重现此问题,则很难进行调试,特别是因为您没有良好的堆栈跟踪来定位问题的源头。但是,如果您使用express.js app.error钩子(这里的文档),则需要记录从“Bad file descriptor”错误中的错误路径,这应该能够让您知道这是否是一个被删除的临时文件等。就实际原因而言,我们只能提供猜测,因为“Bad file descriptor”是一个非常通用的低级错误,基本上意味着您正在对不再处于正确状态以处理该操作的文件描述符调用操作(例如读取已关闭的文件,打开已删除的文件等)。"

0

这个错误可能是由于使用fs保存文件名为数字而不是字符串。文件名必须是字符串:

不正确的:

const fileName = 12345;
const fileContent = "The great croissant."

fs.writeFileSync(fileName, fileContent);

正确:

fs.writeFileSync(`${fileName}`, fileContent);

也是正确的:

const fileName = "12345";
fs.writeFileSync(fileName, fileContent);

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接