【发布时间】:2021-02-02 16:17:43
【问题描述】:
我希望将 next.js 中的服务器端生成页面作为文件提供。所以我想在自定义 server.js 文件中获取呈现的内容:
const express = require('express');
const next = require('next');
const port = parseInt(process.env.PORT, 10) || 3000;
const dev = process.env.NODE_ENV !== 'production';
const app = next({dev});
const handle = app.getRequestHandler();
app.prepare().then(() => {
const server = express();
server.get('/', async (req, res) => {
const nextResponse = await app.renderToHTML(req, res, '/', req.query);
console.log('nextResponse', nextResponse);
console.log('res.body', res.body);
});
server.get('*', (req, res) => {
return handle(req, res);
});
server.listen(port, (err) => {
if (err) throw err;
console.log(`> Ready on http://localhost:${port}`);
});
});
奇怪的是,每个 console.log 都返回 null 或 undefined。
我认为 renderToHTML 只会返回呈现的 HTML 字符串。有没有办法做到这一点?
【问题讨论】:
-
显然,
renderToHtml()不返回 HTML SSR 代码,并自动发送到响应套接字 github.com/vercel/next.js/issues/14737。尝试覆盖中间件response.send方法,如下所示:nextjs.org/docs/api-routes/api-middlewares 引用您自己的nextResponse以在调用后访问
标签: javascript next.js server-side-rendering