后端采用node.js的express部署,可以实现ssr,但是界面加载有问题,server.js代码如下:
const express = require('express');
// 创建 Express 应用
const app = express();
const entryServer = require('./server/entry-server.js');
app.get('*', async (req, res) => {
console.log('SSR Error输出:');
// 执行 SSR 渲染
const renderedHtml = await entryServer.render(req.url);
res.send(renderedHtml.appHtml);
});
// 监听指定端口
app.listen(3000, () => {
console.log('服务器已启动,监听端口 3000');
});
2 个回复
1***@qq.com (作者)
已经解决,参考uni-ssr的实现,server.js代码如下:
const http = require('http');
const fs = require('fs');
const path = require('path')
const template = fs.readFileSync(path.join(__dirname, './server/index.html'), 'utf-8')
const manifest = require('./server/ssr-manifest.json')
const render = require('./server/entry-server.js').render
// 定义处理请求的函数
async function handleRequest(req, res) {
// 执行 SSR 渲染
const {
appHtml,
preloadLinks,
appContext,
headMeta
} = await render(
req.url
)
//模板变量替换
const html = template
.replace(
<!--preload-links-->
, preloadLinks).replace(
<!--app-html-->
, appHtml).replace(
<!--app-context-->
, appContext).replace('<!--head-meta-->', headMeta)
}
// 创建服务器并监听指定端口
const server = http.createServer(handleRequest);
server.listen(3000, () => {
console.log('Server is running on port 3000.');
});
糖醋鱼
请问一下,这种是不是首屏渲染+客户端渲染的ssr,资源文件是通过静态托管域名获取还是能够直接读取相同目录下的资源文件?