在Hapi应用程序中访问路由控制器时出现问题可能涉及多个方面。以下是系统性分析和解决方案:
server.route()
注册,包含method
、path
、handler
等配置项。handler
函数,处理请求并返回响应。现象:访问路径返回404。 原因:
// 正确示例
server.route({
method: 'GET',
path: '/api/users',
handler: userController.listUsers // 确保控制器已导入
});
现象:handler is not a function
错误。
解决方案:
// controllers/user.js
module.exports = {
listUsers: async (request, h) => {
return { data: [] };
}
};
// server.js
const userController = require('./controllers/user'); // 路径需正确
现象:请求挂起或返回500错误。 解决方案:
handler: async (request, h) => {
try {
const data = await db.query('SELECT * FROM users');
return h.response(data);
} catch (err) {
return h.response({ error: err.message }).code(500);
}
}
现象:意外触发其他路由。 解决方案:
现象:依赖插件的路由失效。 解决方案:
// 先加载依赖插件
await server.register([AuthPlugin, DbPlugin]);
// 再注册路由
server.route(require('./routes'));
console.log(server.table());
const server = Hapi.server({
debug: { request: ['error'] }
});
// routes/users.js
module.exports = [
{
method: 'GET',
path: '/users',
handler: userController.listUsers
}
];
// server.js
server.route(require('./routes/users'));
{
path: '/users/{id}',
handler: userController.getUser,
options: {
validate: {
params: {
id: Joi.number().integer()
}
}
}
}
问题:尝试访问POST /api/login
返回405 Method Not Allowed
原因:
{
method: ['POST', 'OPTIONS'], // 处理预检请求
path: '/api/login',
handler: authController.login,
options: {
cors: true
}
}
建议通过逐步检查路由注册、控制器导出、错误处理等环节定位问题根源。若问题持续,可提供具体错误信息进一步分析。
没有搜到相关的文章