Node.js EXDEV重命名错误

我一直在玩关于Node.js的书中find的一些代码。 这是一个简单的应用程序上传图像。

它显示EXDEV错误(500错误:EXDEV,重命名)。

有人能给我一个提示吗? 这是我的代码:

exports.submit = function(dir) { return function(req, res, next) { var img = req.files.photo.image; var name = req.body.photo.name || img.name; var path = join(dir, img.name); fs.rename(img.path, path, function (err) { if(err) return next(err); Photo.create({ name: name, path: img.name }, function (err) { if(err) return next(err); res.redirect('/'); }); }); }; }; 

重命名文件不能跨设备完成。 我的猜测是你的上传目录(默认是/tmp )在另一个分区/驱动器上作为目标目录(包含在dirvariables中)。

一些解决scheme

  • 将上传目录configuration为与目标目录位于同一分区/驱动器上; 这取决于你使用哪个模块来处理file upload, express.bodyParser (和它使用的模块connect.multipart )接受一个你可以使用的uploadDir选项;
  • 在启动Node应用程序之前,将TMPDIR环境variables设置为指向与目标目录相同分区/驱动器上的临时目录。 如果您使用的是Unixtypes的操作系统:

     env TMPDIR=/path/to/directory node app.js 
  • 而不是从你的shell设置环境variables,把它设置在Node应用程序的顶部:

     process.env.TMPDIR = '/path/to/directory'; 
  • 而不是重命名,使用像mv这样的模块可以跨设备工作;

使用Windows XP,我添加到app.js:

 process.env.TMPDIR = '.'; //new