node.js - 无法使用express从nodejs请求对象访问文件

标签 node.js file-upload express

Node v0.10.30 表达@4.7.2

我想读取发布到 REST API 的文件,但无法使用以下代码执行此操作。 我相对来说是nodejs的新手。

我尝试使用 connect-busboy 和下面的代码,但它似乎覆盖了主体解析器。 正文解析器似乎不支持多部分文件上传。

我确信我将 Express 4 与旧式(版本)编码混合在一起,任何见解都会有所帮助。 预先感谢您的帮助。

            var express = require('express');
            var App = function(){

            // Scope
            var self = this;

            self.ipaddr  = process.env.OPENSHIFT_NODEJS_IP|| '127.0.0.1';
            self.port    = parseInt(process.env.OPENSHIFT_NODEJS_PORT|| 3000) ;
            if (typeof self.ipaddr === "undefined") {
            console.warn('No OPENSHIFT_NODEJS_IP environment variable');
            };

            // Web app urls
            self.app  = express();

            //This uses the Connect frameworks body parser to parse the body of the post request
            var bodyParser = require('body-parser');
            var methodOverride = require('method-override');
            // parse application/x-www-form-urlencoded
            self.app.use(bodyParser.urlencoded({extended: true}));
            // parse application/json
            self.app.use(bodyParser.json());
            // override with POST having ?_method=DELETE
            self.app.use(methodOverride('_method'))


            // Web app logic
            self.routes = {};

            //upload image
            self.routes['uploadImage'] = function(req, res){
            console.log("upload");
            console.log(req.files);
            res.end('success');
            };
            //new
            self.app.post('/ws/upload', self.routes['uploadImage']);

            //public
            self.app.use(express.static(__dirname));

            // Logic to open a database connection. We are going to call this outside of app so it is available to all our functions inside.
            self.connectDb = function(callback){
            self.db.open(function(err, db){
            if(err){ throw err };
            if(err){ throw err };
            callback();
            });
            };

            //starting the nodejs server with express
            self.startServer = function(){
            self.app.listen(self.port, self.ipaddr, function(){
            console.log('%s: Node server started on %s:%d ...', Date(Date.now()), self.ipaddr, self.port);
            });
            }

            // Destructors
            self.terminator = function(sig) {
            if (typeof sig === "string") {
            console.log('%s: Received %s - terminating Node server ...', Date(Date.now()), sig);
            process.exit(1);
            };
            console.log('%s: Node server stopped.', Date(Date.now()) );
            };

            process.on('exit', function() { self.terminator(); });

            self.terminatorSetup = function(element, index, array) {
            process.on(element, function() { self.terminator(element); });
            };

            ['SIGHUP', 'SIGINT', 'SIGQUIT', 'SIGILL', 'SIGTRAP', 'SIGABRT', 'SIGBUS', 'SIGFPE', 'SIGUSR1', 'SIGSEGV', 'SIGUSR2', 'SIGPIPE', 'SIGTERM'].forEach(self.terminatorSetup);

            };

            //make a new express app
            var app = new App();

            //call the connectDb function and pass in the start server command
            app.connectDb(app.startServer);

最佳答案

body-parser 不提供处理 multipart/form-data 请求的中间件。有multer它确实提供了这一点,并且是建立在 busboy 之上的。还有formidable/multiparty .

关于node.js - 无法使用express从nodejs请求对象访问文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27392267/

相关文章:

javascript - 编写此 promise 链的更好方法

javascript - 如何从单个多选文件输入创建多个文件输入

jsf - 如何使用 JSF 2.2 上传多个文件

javascript - 如何将多个集合数据从mongodb渲染到node js中的页面

javascript - Node.js 中的路由模块出现 `Cannot GET/en/first` 错误

node.js 子进程更改目录并运行该进程

javascript - 生成 XBRL 文件的更好方法是什么?

javascript - 服务器关闭时触发事件 (NodeJS)

php - 谷歌文档 API。使用 curl 上传文件

node.js - Express中间件奇怪的执行结果