我在我的项目中使用了Next.js和Node.js。
我们拥有的: 页面结构:
pages / products / PageSomeName.js
pages / products / PageEnotherName.js
pages / products / PageName.js
产品文件夹中的页面名称可以不同
routes.js
routes.add("/products/:id", "/products/[id].js");
server.js
app.prepare().then(() => {
const server = express();
server.use(
"./images",
express.static(path.join(__dirname, "images"), {
maxAge: dev ? "0" : "365d"
})
);
server.use(bodyParser.json());
server.get("*", (req, res) => {
return handle(req, res);
});
const PORT = process.env.PORT || 9001;
server.listen(PORT, err => {
if (err) throw err;
console.log(`> Read on http://${process.env.SITE_URL_FULL}`);
});
});
链接组件
<Link href={`/products/${data.link}`} as={`/products/${data.slug}`}/>
数据数组
export const storeProducts = [
{
id: 1,
title: "Title1",
link: "product_name_some",
slug: "product-1-slug",
},
{
id: 2,
title: "Title2",
link: "product_name_different_some_name",
slug: "product-2-slug"
},
当我为链接添加段塞时出现问题。
通过客户端,一切正常。我在浏览器URL中使用localhost:3000 / product-2-slug。但是重新加载后,我从Next.js提取404错误页面
我必须在server.js的服务器端添加什么才能正常加载服务器? 也许我需要在 routes.js
中更改链接组件或下一路线设置谢谢!
答案 0 :(得分:0)
在 server.js 中,您应该具有以下路由。
server.get("/products/product1", (req, res) => {
return handle(req, res);
});
server.get("/products/product2", (req, res) => {
return handle(req, res);
});
server.get("/products/product3", (req, res) => {
return handle(req, res);
});
处理此问题的一种好方法是在 pages 目录内和服务器句柄上创建通用的 products.js ,如下所示。
server.js
server.get("/products/:id", (req, res) => {
return handle(req, res, { id: req.params.id });
});
和
pages / products.js ,我们可以创建 getInitialProps 方法
static getInitialProps (context) {
// parameters reqturned from server are accessible via
const id = ctx.query.id
}