Javascript 错误EACCES权限被拒绝mkdir multer node.js

Javascript 错误EACCES权限被拒绝mkdir multer node.js,javascript,node.js,mkdir,multer,Javascript,Node.js,Mkdir,Multer,我有一个Node.js应用服务器在Ubuntu 14.04 LTS机器上运行,但当我尝试通过浏览器连接时,PM2日志上显示以下错误: www-0 (err): Error: EACCES: permission denied, mkdir '/var/www/myapp/MyApp/MyApp/uploads' www-0 (err): at Error (native) www-0 (err): at Object.fs.mkdirSync (fs.js:794:18) www

我有一个Node.js应用服务器在Ubuntu 14.04 LTS机器上运行,但当我尝试通过浏览器连接时,PM2日志上显示以下错误:

www-0 (err): Error: EACCES: permission denied, mkdir '/var/www/myapp/MyApp/MyApp/uploads'
www-0 (err):     at Error (native)
www-0 (err):     at Object.fs.mkdirSync (fs.js:794:18)
www-0 (err):     at Function.sync (/var/www/myapp/MyApp/MyApp/node_modules/multer/node_modules/mkdirp/index.js:71:13)
www-0 (err):     at new DiskStorage (/var/www/myapp/MyApp/MyApp/node_modules/multer/storage/disk.js:21:12)
www-0 (err):     at module.exports (/var/www/myapp/MyApp/MyApp/node_modules/multer/storage/disk.js:65:10)
www-0 (err):     at new Multer (/var/www/myapp/MyApp/MyApp/node_modules/multer/index.js:15:20)
www-0 (err):     at multer (/var/www/myapp/MyApp/MyApp/node_modules/multer/index.js:88:12)
www-0 (err):     at Object.<anonymous> (/var/www/myapp/MyApp/MyApp/app.js:45:9)
www-0 (err):     at Module._compile (module.js:410:26)
www-0 (err):     at Object.Module._extensions..js (module.js:417:10)
www-0 (err):     at Module.load (module.js:344:32)
www-0 (err):     at Function.Module._load (module.js:301:12)
www-0 (err):     at Function._load (/usr/local/lib/node_modules/pm2/node_modules/pmx/lib/transaction.js:62:21)
www-0 (err):     at Module.require (module.js:354:17)
www-0 (err):     at require (internal/module.js:12:17)
www-0 (err):     at Object.<anonymous> (/var/www/myapp/MyApp/MyApp/bin/www:7:11)
此外,这些是目录当前拥有的权限和权限myuser拥有sudo权限

myuser@myhost:~$ ls -dl /var/www
drwxr-xr-x 3 root root 4096 Feb  4 01:17 /var/www

myuser@myhost:~$ ls -dl /var/www/myapp
drwxr-xr-x 3 myuser myuser 4096 Feb  4 01:18 /var/www/myapp

myuser@myhost:~$ ls -dl /var/www/myapp/MyApp
drwxrwxr-x 4 myuser myuser 4096 Feb  4 16:49 /var/www/myapp/MyApp

myuser@myhost:~$ ls -dl /var/www/myapp/MyApp/MyApp
drwxrwxr-x 12 myuser myuser 4096 Feb  4 16:57 /var/www/myapp/MyApp/MyApp

myuser@myhost:~$ ls -dl /var/www/myapp/MyApp/MyApp/uploads
drwxrwxr-x 2 myuser myuser 4096 Feb  4 02:04 /var/www/myapp/MyApp/MyApp/uploads

顺便说一下,更改为{dest:'./uploads/'}会出现相同的错误。

如果您使用任何IDE开发应用程序,请始终以sudo模式运行该应用程序。 例如。如果您正在使用webstorm,请始终在文件中运行它的webstorm.sh,如下所示

sudobash/opt/webstorm/bin/webstorm.sh


myuser可能具有sudo权限,但如果不使用sudo to mkdir,则访问将被拒绝。我希望你的应用程序不会以root权限运行,这是安全噩梦的秘诀。@migg我如何让应用程序使用sudo to mkdir?当我通过命令行尝试它时没有问题,是应用程序遇到了麻烦。另外,我确信我的应用程序没有以root权限运行。我认为你不应该这样做,即使从安全的角度看这是可能的。您正在使用的模块无法执行此操作。只需将uploads文件夹上的权限更改为运行应用程序的用户的可写权限即可。@migg如果您可以看到,最后一行显示myuser对uploads文件夹具有写权限,并且应用程序正在myuser上运行。这就是为什么我不知道发生了什么。那么,上传文件夹已经存在,您正在尝试mkdir,这是正确的吗?不确定这是否是一个合适的答案,最好以评论或类似方式发布。如果您觉得这是一个答案,请详细说明这是如何解决OP的问题的
myuser@myhost:~$ ls -dl /var/www
drwxr-xr-x 3 root root 4096 Feb  4 01:17 /var/www

myuser@myhost:~$ ls -dl /var/www/myapp
drwxr-xr-x 3 myuser myuser 4096 Feb  4 01:18 /var/www/myapp

myuser@myhost:~$ ls -dl /var/www/myapp/MyApp
drwxrwxr-x 4 myuser myuser 4096 Feb  4 16:49 /var/www/myapp/MyApp

myuser@myhost:~$ ls -dl /var/www/myapp/MyApp/MyApp
drwxrwxr-x 12 myuser myuser 4096 Feb  4 16:57 /var/www/myapp/MyApp/MyApp

myuser@myhost:~$ ls -dl /var/www/myapp/MyApp/MyApp/uploads
drwxrwxr-x 2 myuser myuser 4096 Feb  4 02:04 /var/www/myapp/MyApp/MyApp/uploads