Remix Arc Sandbox报错:handler is not a function 求助排查
问题描述
执行npx remix build构建Remix应用后,通过node ./dev sandbox在Arc sandbox启动(端口3001),浏览器访问时抛出Lambda错误:
Lambda error
Error: TypeError: handler is not a function
Lambda: @http any /*: handler is not a function
Stack trace:
TypeError: handler is not a function, at run ([eval]:1:6752), at processTicksAndRejections (node:internal/process/task_queues:95:5), at main ([eval]:1:6967)
全新创建的Remix项目可正常运行,当前项目的Arc配置如下:
@app remix-latest-7073 @http /* method any src server @static @tables user pk *String password pk *String # userId note pk *String # userId sk **String # noteId
已尝试删除node_modules和server目录,重新构建后启动沙箱,也修改过http资源指向其他目录,但仅出现不同错误,期望沙箱能像全新项目一样正常运行。
解决方案
- 检查
server目录入口文件的导出规范
Arc的@http指定src server时,会默认加载server/index.js(或.ts),必须确保该文件命名导出handler函数,而非默认导出:
// server/index.js const { createRequestHandler } = require("@remix-run/architect"); const build = require("./build"); export async function handler(event) { return createRequestHandler({ build, mode: process.env.NODE_ENV })(event); }
如果用TypeScript,需确认编译后的JS文件正确保留了handler的命名导出。
- 验证Remix构建产物路径
执行npx remix build后,检查server/build目录是否存在完整的构建文件(如routes文件夹、assets-manifest.json)。若路径不符,在remix.config.js中调整serverBuildPath:
// remix.config.js module.exports = { serverBuildPath: "server/build/index.js", // 其他配置项... };
- 清理Arc沙箱缓存
沙箱可能缓存旧的构建产物,执行以下命令清理后重启:
rm -rf .arc-sandbox node ./dev sandbox
- 对齐依赖与配置版本
将当前项目的package.json依赖版本(尤其是@remix-run/architect、@remix-run/node)、remix.config.js配置与全新Remix项目对比,确保版本一致、配置无差异。
内容的提问来源于stack exchange,提问作者calcoder
相关产品推荐
相关产品推荐

