[英]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中的任何進程一樣。
您可以通過使用lsof
和ps
檢查正在運行的進程來做到這一點。
簡而言之(顯示您的節點應用程序的運行用戶):
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.