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

时间:2014-02-24 19:30:20

标签: javascript linux node.js createfile fs

我正在尝试使用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没有任何问题。

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

1 个答案:

答案 0 :(得分:2)

您应该做的第一件事是确定运行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()模式。< / p>

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

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