繁体   English   中英

带有选项'a'的Node.js fs.open生成EACCES错误

[英]Node.js fs.open with option 'a' generates EACCES error

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

    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和文件夹上运行,我尝试在其中创建此类文件的文件夹位于同一台计算机上。

而且,mkdir没有问题。

我知道,这与权限有关,但是我无法理解为什么它与创建文件夹不同以及如何解决此问题。

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

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

您可以通过使用lsofps检查正在运行的进程来做到这一点。

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

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

您应该确定的第二件事是所讨论的文件(即/mount/fs/folder/newGroup.xml)是否具有“写入/附加”权限,您当前将其指定为fs.open()模式。

您可以确定文件的权限(由于/mount的挂载点指示可能的只读文件系统(例如DVD / CD驱动器上的文件系统),因此我认为它将是只读文件共享):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM