Expressjs - 在中间件内部使用中间件
Expressjs - Use middleware inside middleware
我想使用中间件来验证基于 raml 文件的请求。
我的代码是什么样的:
// require
let resources = require('osprey-resources');
let errorHandler = require('request-error-handler');
let handler = require('osprey-method-handler');
// create express instance
let app = express();
// ramlObj obtained by raml2obj.parse(myPath).then()
let router = resources(ramlObj.resources,
function (method, path) {
// get the method type : get/post/etc
let methodType = method.method.toUpperCase();
// provide a function (controller) for this path
return controllers.provideController(methodType, path);
}
);
// osprey-router middelware , created by osprey-resources
app.use('/v1', router);
// error Handler middelware
app.use(errorHandler(responder, DEFAULT_LANGUAGE, customMessages));
// What I want:
// routes middelware
app.use('/v1', custom_middleware(method, methodType, path), router);
其中 custom_middleware
在内部使用 osprey-method-handler
以及我提供给他的所有参数。
我尝试连接但没有成功
对于您的示例,您需要使用部分函数来允许 req
、res
和 next
发送到您的 custom_middleware
函数。
一个使用 lodash 的例子:
// Route
app.use('/v1', _.partialRight(custom_middleware, method, methodType, path), router);
// Function
custom_middleware(req, res, next, method, methodType, path) {
...
}
我想使用中间件来验证基于 raml 文件的请求。
我的代码是什么样的:
// require
let resources = require('osprey-resources');
let errorHandler = require('request-error-handler');
let handler = require('osprey-method-handler');
// create express instance
let app = express();
// ramlObj obtained by raml2obj.parse(myPath).then()
let router = resources(ramlObj.resources,
function (method, path) {
// get the method type : get/post/etc
let methodType = method.method.toUpperCase();
// provide a function (controller) for this path
return controllers.provideController(methodType, path);
}
);
// osprey-router middelware , created by osprey-resources
app.use('/v1', router);
// error Handler middelware
app.use(errorHandler(responder, DEFAULT_LANGUAGE, customMessages));
// What I want:
// routes middelware
app.use('/v1', custom_middleware(method, methodType, path), router);
其中 custom_middleware
在内部使用 osprey-method-handler
以及我提供给他的所有参数。
我尝试连接但没有成功
对于您的示例,您需要使用部分函数来允许 req
、res
和 next
发送到您的 custom_middleware
函数。
一个使用 lodash 的例子:
// Route
app.use('/v1', _.partialRight(custom_middleware, method, methodType, path), router);
// Function
custom_middleware(req, res, next, method, methodType, path) {
...
}