如何使用 Express.js 提供 Next.js SSG 文件

How to serve Next.js SSG files with Express.js

执行next export时,会生成一个名为build的文件夹。目前我想使用 Express.js 提供这些静态文件,代码如下:

app.use('/', express.static(path.join(__dirname, 'build')));
app.get('*', (req, res) => {
  console.log(req.path);
  res.sendFile(path.resolve(__dirname, 'build', 'index.html'));
});
app.listen(PORT, () => console.log('App is running!'));

这里的问题是当访问/以外的路径时,例如/blog,它会重定向到/ 文件 (index.html),我应该为每条路线逐条输入路线,还是有其他方法可以使用 express 提供下一个 SSG 文件?

我设法做了这样的事情:

const dir = __dirname;
const sendFile = (file) => (req, res) => res.sendFile(path.resolve(dir, 'build', file));
const pathMap = new Set([
  '/settings', '/home' // All available static paths
]);

// For static files such as icons/images/etc
app.use(express.static(path.join(dir, 'build')));

// Nextjs dynamic routing
app.get('/blog/:blogID', sendFile('blog/[blogID].html'));
app.get('/category/:category', sendFile('category/[category].html'));

// Other paths, check whether to show page or 404(not found) page
app.get('*', (req, res) => {
  const p = req.path;
  if (pathMap.has(p)) res.sendFile(path.resolve(dir, 'build', `${p.slice(1)}.html`));
  else res.sendFile(path.resolve(dir, 'build', '404.html'));
});