运行在Azure上的express.js中的multipart / form-data错误
所以我有一个在Windows Azure上运行的快速站点。 我目前有提交表单被标记为enctype =“multipart / form-data”的问题。
我在日志中得到的错误是:TypeError:Object#没有方法'tmpDir'
在本地运行(通过node.exe启动)时,它工作得非常好,只有在使用AzureEmulator或Azure本身失败时才有效。
现在我预计这与Azure的基础设施有关,但是我想知道是否有人设法解决这个问题?
所以这里有一个多方面的问题,我会尽可能的解释我的发现,请耐心等待。
Connect使用节点强大的多部分表单parsing,特别是IncomingForm类。 在IncomingForm的构造函数中,它将上传目录设置为传入参数的目录,或者默认为由os.tmpDir()定义的操作系统的临时目录。 但是,该方法在Windows的“os”模块实现中缺less。
在阅读了大量的post,线程等之后,我发现你应该能够解决这个问题,你需要设置bodyParser的uploadDir属性。
app.use(express.bodyParser({ uploadDir: 'path/to/dir' }));
然而,在编写连接的多部分表单处理的时候(在撰写本文时),它创build了一个IncomingForm对象,而不将任何parameter passing给构造函数,然后再设置属性:
var form = new formidable.IncomingForm , data = {} , files = {} , done; Object.keys(options).forEach(function(key){ form[key] = options[key]; });
所以我已经分叉expression和连接和更新代码读取为:
var form = new formidable.IncomingForm(options) , data = {} , files = {} , done; Object.keys(options).forEach(function(key){ form[key] = options[key]; });
你可以在这里find分支版本: 不是无耻的插件
修复Windows环境(Azure网站+ node.js应用程序)。
server.js:
确保它没有设置上传目录或tmp目录
app.use(express.bodyParser());
packages.json:
强制节点0.10.21或以上:
"engines": { "node": "v0.10.24" }
部队expression3.4.8或以上:
"express": "3.4.8"
这应该更新您的节点到固定的lib版本,问题应该消失。
- Azure NodeJS错误:ENOENT,打开'D:\ home \ site \ wwwroot \ bin \ views \'
- 在自托pipe的VSO代理上运行NPM
- 编辑Microsoft ChatBot UIdevise
- 微软Bot框架,它可以开始对话
- Node.JS:Azure不会从package.json安装新的依赖项
- 本地testingAzure Mobile Auth – 无效的jwt签名
- 在Node.js Web应用程序中使用用户名和密码在Azure AD上进行身份validation
- AZURE Mobile Service在表插入脚本中转发POST请求
- 从azure eventhub使用node.js消耗八位字节stream数据