You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 04:05:10