Architect (arc.http)中间件执行后未调用后续处理器的问题排查
Architect共享中间件未触发后续处理器的问题解决
你的核心问题是auth中间件在验证通过时未正确放行,导致后续的fn函数无法执行。
关键规则说明
Architect的Node.js中间件逻辑:
- 若中间件返回包含
statusCode的响应对象,框架会直接返回该响应,终止后续流程 - 若中间件返回
undefined(或无返回值),或返回修改后的req对象,框架才会继续执行后续处理器函数
问题代码分析
你的auth中间件在验证通过时,函数执行到末尾默认返回undefined,但可能因为同步函数的处理逻辑,框架未正确识别放行信号,需要明确给出放行的返回值。
修改方案
方案1:同步中间件明确返回undefined
修改src/shared/auth.js,在验证通过分支添加return;(明确返回undefined):
const jwt = require('jsonwebtoken'); const config = require('./utils/config.js'); module.exports.handler = (req) => { const authorizationToken = req?.headers?.authorization; if (typeof authorizationToken !== 'string') { return {statusCode: 401} } const tokens = authorizationToken.split(' '); if (tokens[0] !== 'Bearer') { return {statusCode: 401} } try { const auth = jwt.verify(tokens[1], config.jwt.secret, { algorithms: [config.jwt.config.algorithm], }); if (!auth.data.someSecurityKeyOrValue) { return {statusCode: 401} } // 验证通过,明确返回undefined以触发后续流程 return; } catch (err) { return {statusCode: 401} } };
方案2:改为异步中间件并返回req
将auth中间件改为异步函数,验证通过时返回原req(或修改后的req),适配框架的异步处理逻辑:
const jwt = require('jsonwebtoken'); const config = require('./utils/config.js'); module.exports.handler = async (req) => { const authorizationToken = req?.headers?.authorization; if (typeof authorizationToken !== 'string') { return {statusCode: 401} } const tokens = authorizationToken.split(' '); if (tokens[0] !== 'Bearer') { return {statusCode: 401} } try { const auth = jwt.verify(tokens[1], config.jwt.secret, { algorithms: [config.jwt.config.algorithm], }); if (!auth.data.someSecurityKeyOrValue) { return {statusCode: 401} } // 验证通过,返回req以触发后续流程 return req; } catch (err) { return {statusCode: 401} } };
验证修改
修改后,get-counts/index.js中的fn函数会被正常调用,同时保留中间件的鉴权逻辑。
内容的提问来源于stack exchange,提问作者jktravis
相关产品推荐
相关产品推荐

