【问题标题】:Use adapter-node (SvelteKit) to create middleware for Express server使用适配器节点(SvelteKit)为 Express 服务器创建中间件
【发布时间】:2022-01-21 12:52:51
【问题描述】:

我正在尝试在我现有的 Express 服务器上实现一个 SvelteKit 前端,用于处理身份验证等。

我正在使用节点适配器并尝试将其作为中间件连接到我的 Express 应用程序,使用

app.use(assetsMiddleware, prerenderedMiddleware, kitMiddleware);

并从中导入

const { assetsMiddleware, prerenderedMiddleware, kitMiddleware } = "./client/build/middlewares.js";

但我得到了错误

TypeError: Router.use() requires a middleware function but got a undefined

这让我相信它没有正确导入模块并且三个导入都是未定义的,尽管我可以在 middlewares.js 文件中看到导出是正确的。我尝试了 ES6 模块,但没有成功,而且我更喜欢用 Express 坚持使用 commonJS。 我找不到任何关于以这种方式使用节点适配器的存储库或教程,而且文档很少。

基本上,这个错误的修复方法是什么?如果有任何资源可以帮助 SK 作为 Express 中的中间件,我也将不胜感激!

【问题讨论】:

    标签: node.js express middleware sveltekit


    【解决方案1】:

    您似乎忘记了require() "./client/build/middlewares.js";。对象解构字符串(即const { x, y } = "Some String")使变量undefined。所以对于app.use(),您实际上传递了三个等于未定义的变量(即assetsMiddleware === undefined)。这就是为什么它给出一个TypeError

    所以你需要做的改变是这样的:

    const { assetsMiddleware, prerenderedMiddleware, kitMiddleware } = require("./client/build/middlewares.js");
    

    我希望这可以为您解决问题!

    【讨论】:

    • 现在我收到这个错误Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: ...\build\middlewares.js require() of ES modules is not supported. 如果不切换到 ES6 导入,我该如何解决这个问题?
    • 补充一下,我已经调整了 svelte.config.js 设置以包含类似 esbuild(defaultOptions) { return { ...defaultOptions, format: "cjs", plugins: [], }; }, 的内容,但是我仍然遇到同样的错误。 (为格式化道歉!)
    • @Max 它应该适用于默认配置。适配器docs 包含示例代码(只需切换 polka 即可表达)。您还应该确保您使用的是最新版本的适配器 (npm I @sveltejs/adapter-node@next)。在另一个目录中使用 cli 生成示例项目以复制其配置(确保将其更改为 adapter-node)永远不会受到伤害。希望这会有所帮助!
    • 我得到了它的工作...花了一段时间将所有东西切换到 ES6 模块,但我认为这是最好的。感谢您的帮助。
    猜你喜欢
    • 2021-12-01
    • 2022-06-23
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 2021-07-02
    相关资源
    最近更新 更多