我在Wordpress博客上有一个反应前端,如果我运行node server.js
,它会很有用。我可以在任何页面上重新加载,它将按预期工作。
如果我运行node server.js
,我的生产服务器上运行正常。如果我构建并运行设置为运行npm run start
的{{1}},则网站无法正常运行。
这是我的next start -p 80
代码:
server.js
当服务器正在运行时,我可以查看页面,当我重新加载它时工作正常。如果我尝试加载博客文章或类别/城市/国家,那么它将始终为404.
是const compression = require('compression');
const express = require("express");
const next = require("next");
const dev = process.env.NODE_ENV !== "production";
const app = next({ dev: dev });
const handle = app.getRequestHandler();
app
.prepare()
.then(() => {
const server = express();
server.use(compression());
server.use(express.static(__dirname + '/static', { maxAge: 31557600 }));
server.get('/about', (req, res) => {
app.render(req, res, '/about');
});
server.get('/post/:slug', (req, res) => {
const queryParams = { slug: req.params.slug, apiRoute: 'post' };
app.render(req, res, '/post', queryParams);
});
server.get('/page/:slug', (req, res) => {
const queryParams = { slug: req.params.slug, apiRoute: 'page' };
app.render(req, res, '/post', queryParams);
});
server.get('/city/:slug', (req, res) => {
const queryParams = { slug: req.params.slug, taxonomy: 'city' };
app.render(req, res, '/category', queryParams);
});
server.get('/country/:slug', (req, res) => {
const queryParams = { slug: req.params.slug, taxonomy: 'country' };
app.render(req, res, '/category', queryParams);
});
server.get('/_preview/:id/:wpnonce', (req, res) => {
const queryParams = { id: req.params.id, wpnonce: req.params.wpnonce };
app.render(req, res, '/preview', queryParams);
});
server.get("*", (req, res) => {
return handle(req, res);
});
server.listen(process.env.NODE_PORT, err => {
if (err) throw err;
console.log("> Ready on port " + process.env.NODE_PORT);
});
})
.catch(ex => {
console.error(ex.stack);
process.exit(1);
});
代码的问题还是/ post和/ category的React页面中的问题?
答案 0 :(得分:3)
您需要运行npm run build
然后npm run start
。您需要先构建捆绑包,否则不会创建您的页面和nextjs代码。
它适用于dev,因为你不需要为dev构建一个bundle,直接访问代码,但这对于生产来说效率不高。
以下是build
和start
的常用代码:
"build": "next build",
"start": "NODE_ENV=production node server.js",
他们需要放在您的package.json
中。你已经有了它们,因为你说你正在运行npm run start
。
有关详细信息,NextJS教程将引导您完成基本的#9 - Deploying a Next.js App