环回 3 和挂钩 REST API headers
Loopback 3 and hook for REST API headers
我有一个遗留应用程序,它使用环回 3 并公开 REST API,我想从来自客户端的传入请求中获取我的 JWT 令牌。我写了一个钩子来访问 req object 来访问令牌。
Object.keys(app.dataSources).forEach((name: string) => {
if (camelCase(name) === name) {
app.dataSources[name].connector.observe('before execute', (ctx, next) => {
if (!ctx.req.uri) return next();
Object.keys(ctx.req).forEach(function(key) {
console.log(key, ctx.req[key]);
});
});
}
});
路由定义
accepts: [
{arg: 'codeValue', type: 'string', required: false, http: {source: 'query'}},
{arg: 'codeId', type: 'string', required: false, http: {source: 'query'}}
]
上面hook执行时的输出
method GET
uri http://localhost:8010/api/v1/code/100
qs { codeValue: '' } <<== Issue 1
json true
form undefined
headers undefined <<== Issue 2
timeout undefined
以下是上面突出显示的问题:
- 即使我指定了查询参数 codeId,它也没有映射到 req object
- req 中的 headers 变为 undefined
卷曲命令
curl -H "codeId: TS01" -H "codeValue: 'TS 01" http://localhost:8081/api/v1/code/100
我们计划将环回移动到版本 4,但这是一个长期过程。非常感谢任何指点。
来自 LoopBack 团队的问候
根据您代码中的以下代码片段,我假设您正在使用 loopback-connector-rest(或类似的连接器)调用另一个后端服务的 API。
app.dataSources[name].connector.observe('before execute'
请注意,before execute
挂钩是针对您的模型方法发出的 传出 请求调用的。
要访问 incoming 请求对象,您需要创建一个远程挂钩(请参阅我们的文档中的 Remote hooks)。
app.remotes().before('**', (ctx, next) => {
if (!ctx.req.url) return next();
Object.keys(ctx.req).forEach(function(key) {
console.log(key, ctx.req[key]);
});
});
(注意传入的请求没有req.uri
属性,应该用req.url
代替。)
我有一个遗留应用程序,它使用环回 3 并公开 REST API,我想从来自客户端的传入请求中获取我的 JWT 令牌。我写了一个钩子来访问 req object 来访问令牌。
Object.keys(app.dataSources).forEach((name: string) => {
if (camelCase(name) === name) {
app.dataSources[name].connector.observe('before execute', (ctx, next) => {
if (!ctx.req.uri) return next();
Object.keys(ctx.req).forEach(function(key) {
console.log(key, ctx.req[key]);
});
});
}
});
路由定义
accepts: [
{arg: 'codeValue', type: 'string', required: false, http: {source: 'query'}},
{arg: 'codeId', type: 'string', required: false, http: {source: 'query'}}
]
上面hook执行时的输出
method GET
uri http://localhost:8010/api/v1/code/100
qs { codeValue: '' } <<== Issue 1
json true
form undefined
headers undefined <<== Issue 2
timeout undefined
以下是上面突出显示的问题:
- 即使我指定了查询参数 codeId,它也没有映射到 req object
- req 中的 headers 变为 undefined
卷曲命令
curl -H "codeId: TS01" -H "codeValue: 'TS 01" http://localhost:8081/api/v1/code/100
我们计划将环回移动到版本 4,但这是一个长期过程。非常感谢任何指点。
来自 LoopBack 团队的问候
根据您代码中的以下代码片段,我假设您正在使用 loopback-connector-rest(或类似的连接器)调用另一个后端服务的 API。
app.dataSources[name].connector.observe('before execute'
请注意,before execute
挂钩是针对您的模型方法发出的 传出 请求调用的。
要访问 incoming 请求对象,您需要创建一个远程挂钩(请参阅我们的文档中的 Remote hooks)。
app.remotes().before('**', (ctx, next) => {
if (!ctx.req.url) return next();
Object.keys(ctx.req).forEach(function(key) {
console.log(key, ctx.req[key]);
});
});
(注意传入的请求没有req.uri
属性,应该用req.url
代替。)