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



如果我重新加载我的应用程序(从浏览器重新加载按钮)很多次像50 reload/10 seconds它给我这个错误:

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

这对我来说似乎是一个带宽错误或类似的东西,原来我有错误,当我玩HTML 5音频API,如果我加载音频文件10-15次顺序然后我得到了错误,但现在我发现,我得到的错误没有音频API也只是通过重新加载网站很多次,Safari给我的错误比Chrome (WTF?)

我使用Node.js 0.4.8与express + jade,我也连接到一个MySQL数据库与db-mysql模块。

我在网上找不到任何关于这个话题有什么帮助的文章,所以请让我知道是什么导致了这个错误,因为它真的很令人困惑:(

通过"重新加载你的应用程序"你的意思是从浏览器刷新你的应用程序的主页,或实际上停止并重新启动node.js服务器进程?我假设是前者,在这种情况下,如果您不能可靠地重现它,那么调试将非常棘手,特别是因为您没有良好的堆栈跟踪来查明源。但是,如果你使用express.js app.error钩子(这里的文档),你会想要记录"坏文件描述符"错误的错误路径,这应该有希望提示你,这是否是一个临时文件被删除或什么。就实际原因而言,我们只能提供猜测,因为"错误的文件描述符"是一个非常通用的低级错误,基本上意味着您正在调用对文件描述符的操作,该操作不再处于处理该操作的正确状态(例如读取已关闭的文件,打开已删除的文件等)。

@CIRK,看看这个:https://github.com/joyent/node/issues/1189

这不是节点问题,而是系统调优问题。

edit:或者可能与连接1.4.3的错误有关:https://github.com/senchalabs/connect/issues/297

如果这是你的情况,试着升级它

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

不正确:

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

正确的:

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

也是正确的:

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

最新更新