gpt4 book ai didi

javascript - Hapi.js - 添加机制来检查每个路由

转载 作者:行者123 更新时间:2023-11-30 09:43:53 25 4
gpt4 key购买 nike

我正在尝试实现一种机制,该机制将在命中任何路线之前运行。在该机制中,我想从 header 中获取一个值并检查身份验证。

我想出了这个:服务器.js:

// Create a server with a host and port
'use strict';

var Hapi = require('hapi');
var mongojs = require('mongojs');

var plugins = [
require('./routes/entities')
];
var server = new Hapi.Server();
server.connection({
port: 3000
});
//Connect to db
server.app.db = mongojs('hapi-rest-mongo', ['entities']);

server.app.checkHeader = function (request) {
var header = request.headers['x-authorization'];
if(header === "letmein"){
return true
}
return false
};
//Load plugins and start server
server.register(plugins, function (err) {

if (err) {
throw err;
}

// Start the server
server.start(function (err) {
console.log('Server running at:', server.info.uri);
});
});

以及在routes.entities中:

'use strict';

var Boom = require('boom');
var uuid = require('node-uuid');
var Joi = require('joi');

exports.register = function (server, options, next) {

var db = server.app.db;

server.route({
method: 'GET',
path: '/entities',
handler: function handler(request, reply) {

if(!server.app.checkHeader(request))
{
return reply(Boom.unauthorized());

};

//request.server.myFunc();
db.entities.find(function (err, docs) {

if (err) {
return reply(Boom.wrap(err, 'Internal MongoDB error'));
}

reply(docs);
});
}
});

因此,在启动服务器后不久,我就注册了我的函数 server.app.checkHeader

在路由中,我调用它并向其发送请求对象。请求对象包含有关 header 的信息。

虽然这有效,但我感觉我没有遵循 Hapi 的最佳实践。

我怎样才能做得更优雅?

最佳答案

有几个选项。

当然,您可以点击 request lifecycle - 注意在路由处理程序之前管道中发生的事件。

尽管如此,我还是建议您考虑实现一种身份验证策略,该策略可以设置为所有路由的默认值,也可以有选择地设置在适当的路由上。

关于javascript - Hapi.js - 添加机制来检查每个路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39791817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com