Cen*_*ion 50 routes node.js hapijs
所有Hapi示例(以及Express中的类似示例)都显示路由在起始文件中定义:
var Hapi = require('hapi');
var server = new Hapi.Server();
server.connection({ port: 8000 });
server.route({
method: 'GET',
path: '/',
handler: function (request, reply) {
reply('Hello, world!');
}
});
server.route({
method: 'GET',
path: '/{name}',
handler: function (request, reply) {
reply('Hello, ' + encodeURIComponent(request.params.name) + '!');
}
});
server.start(function () {
console.log('Server running at:', server.info.uri);
});
Run Code Online (Sandbox Code Playgroud)
但是,在实现具有大量不同路由的生产应用程序时,不难想象这个文件有多大.因此,我想分解路由,将它们分组并存储在单独的文件中,如UserRoutes.js,CartRoutes.js,然后将它们附加到主文件中(添加到服务器对象).您如何建议将其分开然后添加?
Ger*_*osi 90
您可以为用户路由(config/routes/user.js)创建单独的文件:
module.exports = [
{ method: 'GET', path: '/users', handler: function () {} },
{ method: 'GET', path: '/users/{id}', handler: function () {} }
];
Run Code Online (Sandbox Code Playgroud)
与购物车类似.然后在config/routes(config/routes/index.js)中创建一个索引文件:
var cart = require('./cart');
var user = require('./user');
module.exports = [].concat(cart, user);
Run Code Online (Sandbox Code Playgroud)
然后,您可以在主文件中加载此索引文件并调用server.route():
var routes = require('./config/routes');
...
server.route(routes);
Run Code Online (Sandbox Code Playgroud)
或者,config/routes/index.js而不是添加路径文件(例如cart,user)手动,可以动态加载它们:
const fs = require('fs');
let routes = [];
fs.readdirSync(__dirname)
.filter(file => file != 'index.js')
.forEach(file => {
routes = routes.concat(require(`./${file}`))
});
module.exports = routes;
Run Code Online (Sandbox Code Playgroud)
coq*_*uin 15
你应该尝试Glue插件:https://github.com/hapijs/glue.它允许您模块化您的应用程序.您可以将路由放在单独的子目录中,然后将它们包含在Hapi.js插件中.您还可以使用Glue包含其他插件(Inert,Vision,Good)以及使用清单对象(或json文件)配置应用程序.
快速的例子:
server.js:
var Hapi = require('hapi');
var Glue = require('glue');
var manifest = {
connections: [{
port: 8080
}],
plugins: [
{ inert: [{}] },
{ vision: [{}] },
{ './index': null },
{
'./api': [{
routes: {
prefix: '/api/v1'
}
}]
}
]
};
var options = {
relativeTo: __dirname + '/modules'
};
Glue.compose(manifest, options, function (err, server) {
server.start(function(err) {
console.log('Server running at: %s://%s:%s', server.info.protocol, server.info.address, server.info.port);
});
});
Run Code Online (Sandbox Code Playgroud)
./modules/index/index.js:
exports.register = function(server, options, next) {
server.route({
method: 'GET',
path: '/',
handler: require('./home')
});
});
exports.register.attributes = {
pkg: require('./package.json')
};
Run Code Online (Sandbox Code Playgroud)
./modules/index/package.json:
{
"name": "IndexRoute",
"version": "1.0.0"
}
Run Code Online (Sandbox Code Playgroud)
./modules/index/home.js:
exports.register = function(req, reply) {
reply.view('home', { title: 'Awesome' });
});
Run Code Online (Sandbox Code Playgroud)
看看戴夫史蒂文斯的这篇精彩文章,了解更多细节和例子.
您可以使用require-hapiroutes为您执行某些组织和加载.(我是作者所以我有点偏颇,我写这篇文章是为了让我的生活更轻松地管理路线)
我是require-directory的忠实粉丝,并希望能够轻松管理我的路由.这使您可以在路径中的模块和模块中混合和匹配路径.
然后你可以做这样的事......
var routes = require('./routes');
server.route(routes.routes);
Run Code Online (Sandbox Code Playgroud)
然后在你的目录中你可以有一个路由文件,如...
module.exports = [
{
method : 'GET',
path : '/route1',
handler : routeHandler1,
config : {
description: 'my route description',
notes: 'Important stuff to know about this route',
tags : ['app']
}
},
{
method : 'GET',
path : '/route2',
handler : routeHandler2,
config : {
description: 'my route description',
notes: 'Important stuff to know about this route',
tags : ['app']
}
}];
Run Code Online (Sandbox Code Playgroud)
或者,您可以通过分配模块上的"routes"属性来混合和匹配
module.exports.routes = [
{
method : 'GET',
path : '/route1',
handler : routeHandler1,
config : {
description: 'my route description',
notes: 'Important stuff to know about this route',
tags : ['app']
}
},
{
method : 'GET',
path : '/route2',
handler : routeHandler2,
config : {
description: 'my route description',
notes: 'Important stuff to know about this route',
tags : ['app']
}
}];
Run Code Online (Sandbox Code Playgroud)
总是,很高兴有选择权.有关于github或npmjs站点的完整文档.
| 归档时间: |
|
| 查看次数: |
19747 次 |
| 最近记录: |