本期的演示存储库是https://github.com/hh54188/happy-server/tree/issue-demo
我尝试将Next.js与Hapi.js集成为一个插件。下面是我的next.js插件项目文件夹的主要结构:
--plugins
|--app
|--pages
|--app
|--a.js
|--handlers
|--public
|--dist
|--index.js
|--next.config.js下面是index.js的主要内容,其中大部分是路由注册
const nextRenderService = next({
dir: path.join(__dirname)
});
module.exports = {
name: "AppService",
version: "0.0.1",
register: async function(server, options) {
await nextRenderService.prepare();
server.route({
method: "GET",
path: `/app/${assetPrefix}/_next/webpack-hmr`,
handler: nextHandlerWrapper(nextRenderService)
});
server.route({
method: "GET",
path: "/app/{param*}",
handler: defaultHandler(nextRenderService)
});
server.route({
method: "GET",
path: `/app/${assetPrefix}/_next/on-demand-entries-ping`,
handler: nextHandlerWrapper(nextRenderService)
});
server.route({
method: "GET",
path: `/app/${assetPrefix}/_next/-/page/{param*}`,
handler: {
directory: {
path: path.join(__dirname, pagesPath),
listing: true
}
}
});
server.route({
method: "GET",
path: `/app/${assetPrefix}/_next/{param*}`,
handler: {
directory: {
path: path.join(__dirname, distPath),
listing: true
}
}
});
}
};但是,当我运行服务器并访问http://127.0.0.1:4000/app/a时,页面可以呈现成功,并且大多数脚本文件都可以成功加载。但是_next/webpack-hmr和_next/on-demand-entries-ping请求状态是404。我注意到404状态来自Next.js,而不是Hapi.js
那么我的代码出了什么问题呢?我该如何解决这个问题?
发布于 2018-09-08 23:21:54
assetPrefix配置仅用于使用CDN,并且对于NextJs (documentation)是全局的。您不希望为其他内容设置此设置,例如修改NextJs路由器路径。如果您不打算使用CDN,请忽略此设置。
// in constants/index.js
const assetPrefix = process.env.NODE_ENV === "production"
? "https://cdn.mydomain.com"
: "";您也不希望列出所有NextJs内部路由,并使用NextJs请求处理程序来处理所有调用:
// index.js
const next = require("next");
const path = require("path");
const nextRenderService = next({
dir: path.join(__dirname),
dev: process.env.NODE_ENV !== "production"
});
const { defaultHandler, nextHandlerWrapper } = require("./hanlders");
module.exports = {
name: "AppService",
version: "0.0.1",
register: async function(server, options) {
// https://github.com/zeit/next.js/blob/master/examples/custom-server-hapi/server.js
await nextRenderService.prepare();
// handle NextJs application requests
const handler = nextRenderService.getRequestHandler();
server.route({
method: "GET",
path: "/app/{p*}",
handler: async ({ raw, url }, h) => {
await handler(raw.req, raw.res, url);
return h.close;
}
});
// handle NextJs private routes
server.route({
method: "GET",
path: "/_next/{p*}" /* next specific routes */,
handler: nextHandlerWrapper(nextRenderService)
});
// Other routes
server.route({
method: "GET",
path: "/{p*}" /* catch all route */,
handler: defaultHandler(nextRenderService)
});
}
};发布于 2021-11-02 08:06:47
这个问题是在升级nextjs 11 > 12之后出现的。
这对我很有帮助:
npm install webpack-dev-server -ghttps://stackoverflow.com/questions/52195494
复制相似问题