使用选项“a”的Node.js fs.open生成EACCES错误

我正在尝试在POST请求上使用node.js的fs模块创buildxml文件。

filePath = path.normalize(path.join(profilesDirPath, name + xmlExt)); fs.exists(filePath, function(exists) { if (exists) { callback({ code: h.httpStatus.CONFLICT, resp: 'audio profile group with such name exists' }); return; } fs.open(filePath, 'a', function(error) { if (error) { callback({ code: h.httpStatus.INTERNAL_SERVER_ERROR, resp: error }); return; } callback(null); }); }); 

这会导致错误:

 { "errno": 3, "code": "EACCES", "path": "/mount/fs/folder/newGroup.xml" } 

节点进程运行在Linux和文件夹,我尝试创build这样的文件在同一台机器上。

更重要的是,我对mkdir没有任何问题。

我明白,这是与权限,但我不明白为什么它不同于创build文件夹,以及如何解决这个问题。

您应该做的第一件事是确定您的node.js应用程序正在运行的用户/组组合。

运行时的node.jsinheritance了用户和组成员资格的文件系统权限,就像linux / unix中的任何进程一样。

您可以通过使用lsofps检查正在运行的进程来完成此操作。

简而言之(显示您的节点应用程序的运行用户):

 ps xaf | grep node | awk '{ system("lsof | grep " $1) }' | awk '{ print $3 }' 

你应该确定的第二件事是如果有问题的文件(即/mount/fs/folder/newGroup.xml)具有你正在指定的fs.open()模式的“write / append”权限。

你可以确定这个文件的权限(我假设它将是一个只读文件共享,因为/mount的挂载点指示了一个可能的只读文件系统,例如DVD / CD驱动器上的文件系统),如下所示:

ls -lah /mount/fs/folder/newGroup.xml

Interesting Posts