将自定义Express中间件(如jQuery-File-Upload)添加到Sails.js

dja*_*o-d 7 node.js sails.js

我仍然难以理解如何向sails.js添加中间件.我听说过使用policies.js,创建自定义策略,添加到local.js等.所以有人可以告诉我如何将jquery-file-upload-middleware添加到sails 应用程序中.提前致谢

sgr*_*454 14

在以前的Sails版本中,这将非常困难,因为您无法控制包含自定义中间件的顺序.在v0.10中,它有点困难.

注意:以下内容适用于Sails(v0.10.x)测试版,可通过安装npm install sails@beta.

将自己的自定义中间件插入Sails就像customMiddlewareconfig/express.js文件中添加一个函数一样简单app; 你可以app.use随心所欲.这种方法的缺点是它无法控制何时包含中间件.值得注意的是,它包含身体解析器之后,这对您的情况不起作用.

在最新版本的Sails中,您可以通过实现方法来覆盖所有中间件加载.的参数是,(该组的中间件函数帆通常默认包括),以及(全球帆对象的引用).首先看一下默认的核心实现 - 您可能希望复制相同的订单.所以在你的,你有类似的东西:loadMiddleware/config/express.jsappdefaultMiddlewaresails/config/express.js

var upload = require('jquery-file-upload-middleware');

// configure upload middleware
upload.configure({
    uploadDir: __dirname + '/public/uploads',
    uploadUrl: '/uploads',
    imageVersions: {
        thumbnail: {
            width: 80,
            height: 80
        }
    }
});

module.exports.express = {

    loadMiddleware: function(app, defaultMiddleware, sails) {

        // Use the middleware in the correct order
        app.use(defaultMiddleware.startRequestTimer);
        app.use(defaultMiddleware.cookieParser);
        app.use(defaultMiddleware.session);
        // Insert upload file handler
        app.use('/upload', upload.fileHandler());
        app.use(defaultMiddleware.bodyParser);
        app.use(defaultMiddleware.handleBodyParserError);
        app.use(defaultMiddleware.methodOverride);
        app.use(defaultMiddleware.poweredBy);
        app.use(defaultMiddleware.router);
        app.use(defaultMiddleware.www);
        app.use(defaultMiddleware.favicon);
        app.use(defaultMiddleware[404]);
        app.use(defaultMiddleware[500]);
    }

    ...etc...

}
Run Code Online (Sandbox Code Playgroud)