node.js - 使用 Hapi 时如何将路由存储在单独的文件中?

标签 node.js routes hapi.js

所有 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);
});

但是,当使用大量不同的路径实现生产应用程序时,不难想象这个文件会增长到多大。因此,我想分解路由,将它们分组并存储在单独的文件中,例如 UserRoutes.js、CartRoutes.js,然后将它们附加到主文件中(添加到服务器对象)。您如何建议将其分开然后添加?

最佳答案

您可以为用户路由创建一个单独的文件(config/routes/user.js):

module.exports = [
    { method: 'GET', path: '/users', handler: function () {} },
    { method: 'GET', path: '/users/{id}', handler: function () {} }
];

与购物车类似。然后在config/routes中创建一个索引文件(config/routes/index.js):

var cart = require('./cart');
var user = require('./user');

module.exports = [].concat(cart, user);

然后你可以在主文件中加载这个索引文件并调用 server.route():

var routes = require('./config/routes');

...

server.route(routes);

或者,对于 config/routes/index.js,您无需手动添加路由文件(例如 cartuser),而是可以动态加载它们:

const fs = require('fs');

let routes = [];

fs.readdirSync(__dirname)
  .filter(file => file != 'index.js')
  .forEach(file => {
    routes = routes.concat(require(`./${file}`))
  });

module.exports = routes;

关于node.js - 使用 Hapi 时如何将路由存储在单独的文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27766623/

相关文章:

javascript - 有没有办法找到匹配两个不同填充的文档并在 findOne() 中获取他的文档?

javascript - 已定义 Socket.io,但未定义 socket.io.sockets

javascript - 如何正确更新 Electron 应用程序菜单标签?

node.js - 验证错误: child "password" fails because ["password" is required]

javascript - 如何使用 Joi 清理 hapi 的查询参数?

node.js - 使用 Joi 验证嵌套对象

javascript - 如何使用 Node.js 允许 CORS(不使用 Express)

c# - 使用 C# 创建子域

php - Symfony2 "Parameter ""for route ""must match "[^/]++"(""given) to generate a corresponding URL."

java - play2 调用子模块中的 Controller 、模型、 View