所以这里是一个多管齐下的问题,我会尽可能地解释我的发现,请多多包涵。
Connect 使用node-formidable 进行多部分表单解析,特别是 IncomingForm 类。在 IncomingForm 的构造函数中,它将上传目录设置为您传入的参数的目录,或者默认为操作系统的临时目录,由 os.tmpDir() 定义。但是,节点的“os”模块的 Windows 实现中缺少此方法。
在阅读了大量的帖子、线程等之后,我发现你应该可以解决这个问题,你需要设置 bodyParser 的 uploadDir 属性。
app.use(express.bodyParser({ uploadDir: 'path/to/dir' }));
但是(在撰写本文时)connect 的多部分表单处理实现存在一个错误,即它创建了一个 IncomingForm 对象而不将任何参数传递给构造函数,然后进一步向下设置属性:
var form = new formidable.IncomingForm
, data = {}
, files = {}
, done;
Object.keys(options).forEach(function(key){
form[key] = options[key];
});
所以我已经分叉了 express & connect 并更新了代码以读取为:
var form = new formidable.IncomingForm(options)
, data = {}
, files = {}
, done;
Object.keys(options).forEach(function(key){
form[key] = options[key];
});
您可以在此处找到分叉版本:not a shameless plug