我们正在创建一个单独的API应用,但不得不将其作为现有express.js主应用的一部分。
我的问题是,如何将API身份验证放在适当的位置。我想把它变成一个中间件,后面是app.routes
中间件来处理API路由。
是否可以:
['api']
?或
app.routes
中间件放在主app.routes
中间件的前面? (实际上有两层app.routes
中间件)编辑:
另外,假设我使用第二个选项,是否可以将两个中间件(auth + api app.routes
)作为单个中间件暴露在全局列表中?
答案 0 :(得分:11)
您可以使用自己的中间件路由到快速应用。所以大多数路线都有一个应用程序,api路线也是api应用程序。
示例:http://runnable.com/UWx2MZS8trEHAACZ
var express = require('express');
var app = express();
var api = express();
app.configure(function () {
app.use(express.static(__dirname));
});
app.get('/', function(req, res){
res.send('Hello World');
});
app.get('/api*', api);
api.configure(function () {
api.use(function (req, res, next) {
process.stdout.write('checking');
setTimeout(process.stdout.write.bind(process.stdout, '.'), 100);
setTimeout(process.stdout.write.bind(process.stdout, '.'), 200);
setTimeout(process.stdout.write.bind(process.stdout, '.'), 300);
setTimeout(process.stdout.write.bind(process.stdout, '.'), 400);
setTimeout(process.stdout.write.bind(process.stdout, '.'), 500);
setTimeout(process.stdout.write.bind(process.stdout, '.'), 600);
setTimeout(process.stdout.write.bind(process.stdout, '.'), 700);
setTimeout(process.stdout.write.bind(process.stdout, '.'), 800);
setTimeout(process.stdout.write.bind(process.stdout, '.\n'), 900);
setTimeout(function () {
next();
}, 1000);
});
});
api.get('*', function (req, res) {
res.send('Hello API');
});
app.listen(process.env.OPENSHIFT_NODEJS_PORT, process.env.OPENSHIFT_NODEJS_IP);