所以我在Windows Azure上运行了一个快速站点。我目前在提交标记为enctype =“multipart / form-data”的表单时遇到问题。
我在日志中遇到的错误是:TypeError:Object#没有方法'tmpDir'
当本地运行时(通过node.exe启动)它运行得非常好,只有在使用AzureEmulator或Azure本身时才会失败。
现在我希望这与Azure的基础设施有关,但我想知道是否有人设法解决这个问题?
答案 0 :(得分:2)
这是一个多方面的问题,我会尽可能地解释我的发现,请耐心等待。
Connect使用node-formidable进行多部分表单解析,特别是IncomingForm类。在IncomingForm的构造函数中,它将上传目录设置为您传入的参数的目录,或者默认为操作系统的临时目录,由os.tmpDir()定义。但是,节点的“os”模块的Windows实现中缺少此方法。
在阅读了大量帖子,帖子等之后,我发现你应该可以解决这个问题,你需要设置bodyParser的 uploadDir 属性。
app.use(express.bodyParser({ uploadDir: 'path/to/dir' }));
然而,在撰写本文时,连接的多部分表单处理实现中存在一个错误:它创建一个IncomingForm对象,而不将任何参数传递给构造函数,然后进一步设置属性:
var form = new formidable.IncomingForm
, data = {}
, files = {}
, done;
Object.keys(options).forEach(function(key){
form[key] = options[key];
});
所以我把快递和快递分开了。连接并更新代码以读取:
var form = new formidable.IncomingForm(options)
, data = {}
, files = {}
, done;
Object.keys(options).forEach(function(key){
form[key] = options[key];
});
您可以在此处找到分叉版本:not a shameless plug
答案 1 :(得分:1)
修复Windows环境(Azure网站+ node.js应用程序)。
server.js:
确保它没有设置上传目录或tmp目录
app.use(express.bodyParser());
packages.json:
强制节点0.10.21或以上:
"engines": { "node": "v0.10.24" }
强制表达3.4.8或以上:
"express": "3.4.8"
这应该将您的节点更新为固定的lib版本,问题应该消失。