我想在NextJS中添加一个重定向功能,从CMS(Contentful)中获取所有内容。在这个过程中,我正在考虑两种不同的方法,关于NextJS中的实现和内容建模。我想更好地了解方法I是否可行,也是一个很好的实践,或者我是否应该采取不同的方式,可能是方法II。
方法一:
关于内容建模,我尝试处理的实际情况是:
第页
- 网址
- 内容
重定向 - 来自url
- 到url
某些页面内容类型将来可能会有一些重定向,这意味着对于每个重定向,将创建新的重定向内容。
我编写了一个helper方法,该方法调用API并将内容作为Redirects数组,希望可以使用该数据填充下一个.config.mjs文件中返回的重定向数组。
next.config.mjs fetchRedirects call screenshot(from inside redirects() )
在这种方法中,我发现了一些麻烦,因为我在运行npm dev或尝试构建时得到以下错误:
node:internal/errors:490
ErrorCaptureStackTrace(err);
^
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/Users/user/Dev/my-web/apps/api-calls/graphql/redirects' imported from /Users/user/Dev/DFDS/my-web/apps/dfds-unified-web/next.config.mjs
at new NodeError (node:internal/errors:399:5)
at finalizeResolution (node:internal/modules/esm/resolve:231:11)
at moduleResolve (node:internal/modules/esm/resolve:850:10)
at defaultResolve (node:internal/modules/esm/resolve:1058:11)
at nextResolve (node:internal/modules/esm/loader:164:28)
at ESMLoader.resolve (node:internal/modules/esm/loader:838:30)
at ESMLoader.getModuleJob (node:internal/modules/esm/loader:419:18)
at ModuleWrap.<anonymous> (node:internal/modules/esm/module_job:77:40)
at link (node:internal/modules/esm/module_job:76:36) {
code: 'ERR_MODULE_NOT_FOUND'
}
Node.js v19.4.0
我找不到关于这种方法的适当文档,我也不清楚为什么应用程序会崩溃,因为fetchRedirects的导入路径被正确引用。我已经通过在页面slug内的getStaticProps函数中调用它来测试fetchRedirects方法,它工作正常。
在next.config.mjs中硬编码重定向数组不是一个选择,因为我想提出一个可扩展的解决方案来解决我的问题。
方式二
第页
- 网址
- 重定向
- 内容
我考虑的第二种方法是在Page内容类型中有一个Redirect内容类型。通过这种方式,我可以从getStaticProps函数返回一个redirect元素,以及每个页面的props,然后编写一些逻辑来重定向,以防找到该属性。
我还没有尝试过最后一种方法,但我知道这也是可能的,我也能找到更多关于如何做到这一点的参考资料。但如果可能的话,我仍然想去尝试方法I,因为我想从中学习,或者确认它是无效的或不是好的做法。
我将高度赞赏任何recomendation和可能的文件,我没有找到目前。
谢谢你的时间。
祝你今天愉快!
1条答案
按热度按时间wmomyfyw1#
你现在已经解决了这个问题吗?我想帮助你,但我需要更多关于你的文件夹结构的信息。配置文件的确切位置在哪里?
如果你试图从
/apps
下的不同文件夹导入,它将不起作用,该模块需要与config在同一个apps文件夹中。或者,包含fetch模块的包需要是一个全局共享的包。阅读关于构建可恢复库的这一部分,并查看detailed structure in the Vercel monorepo example。还有一点需要注意的是,如果你想让重定向既能在导航上工作,也能在初始页面请求上工作,你必须使用middleware(见“条件语句”部分),因为配置中的重定向只适用于初始页面请求。