工具:

umijs:react前端应用框架。

koa:基于 Node.js 平台的web 开发框架。

介绍:

本文主要是简单介绍,利用umi开发前端页面,打包成服务端渲染工程包。由Koa实现服务端渲染处理。

过程:

前端部分:

1.正常构建umi工程包。开发web应用。

2.开始ssr配置。

  

1 export default defineConfig({
2 ...others,
3 ssr: {}, // 开启ssr
4 base: '/base/', // root
5 publicPath: '/base/', // root
6 });

3.build命令打包后,会在工程目录下dist包中产生umi.server.js文件。该文件作为服务端渲染的入口。

服务端部分:

1.构建Koa工程。

2.监听端口,处理请求。代码源于umi官方示例。

  

 1 const Koa = require("koa");
2 const compress = require("koa-compress");
3 const mount = require("koa-mount");
4 const { join, extname } = require("path");
5 const { staticPath } = require("./conf/webConf");
6 const root = join(__dirname, staticPath);
7
8 const app = new Koa();
9 app.use(
10 compress({
11 threshold: 2048,
12 gzip: {
13 flush: require("zlib").constants.Z_SYNC_FLUSH,
14 },
15 deflate: {
16 flush: require("zlib").constants.Z_SYNC_FLUSH,
17 },
18 br: false, // 禁用br解决https gzip不生效加载缓慢问题
19 })
20 );
21
22 let render;
23 app.use(async (ctx, next) => {
24 const ext = extname(ctx.request.path);
25 // 符合要求的路由才进行服务端渲染,否则走静态文件逻辑
26 if (!ext) {
27 if (!render) {
28 render = require(`${staticPath}/umi.server`); // 上文中生产的umi.server.js 入口文件的位置
29 }
30 // 这里默认是字符串渲染
31 ctx.type = "text/html";
32 ctx.status = 200;
33 const { html, error } = await render({
34 path: ctx.request.url,
35 });
36 if (error) {
37 console.log("----------------服务端报错-------------------", error);
38 ctx.throw(500, error);
39 }
40 ctx.body = html;
41 } else {
42 await next();
43 }
44 });
45
46 app.use(mount("/base", require("koa-static")(root))); // 静态资源位置 注意此处,要与访问的url相匹配,比如现在配置的,
就是以/base开头的静态资源重定向到 root指代到目录
47
48 app.listen(7001); // 服务监听端口
49 module.exports = app.callback();

结束:

访问localhost:7001端口,即可访问由服务端渲染的页面了。

基于Koa与umi实现服务端(SSR)渲染的更多相关文章

  1. Pomelo:网易开源基于 Node.js 的游戏服务端框架

    Pomelo:网易开源基于 Node.js 的游戏服务端框架 https://github.com/NetEase/pomelo/wiki/Home-in-Chinese

  2. 基于JAX-WS的Web Service服务端/客户端 ;JAX-WS + Spring 开发webservice

    一.基于JAX-WS的Web Service服务端/客户端 下面描述的是在main函数中使用JAX-WS的Web Service的方法,不是在web工程里访问,在web工程里访问,参加第二节. JAX ...

  3. 服务端预渲染之Nuxt(介绍篇)

    现在前端开发一般都是前后端分离,mvvm和mvc的开发框架,如Angular.React和Vue等,虽然写框架能够使我们快速的完成开发,但是由于前后台分离,给项目SEO带来很大的不便,搜索引擎在检索的 ...

  4. 服务端预渲染之Nuxt (使用篇)

    服务端预渲染之Nuxt - 使用 现在大多数开发都是基于Vue或者React开发的,能够达到快速开发的效果,也有一些不足的地方,Nuxt能够在服务端做出渲染,然后让搜索引擎在爬取数据的时候能够读到当前 ...

  5. 基于PlatinumKit库的DLNA服务端开发

    首先,需要特别感谢蓝斯老师的资料,我这里有很大一部分是参考蓝斯老师的,附上传送门:http://blog.csdn.net/lancees/article/details/9178385 一.DLNA ...

  6. 使用CXF开发WebService程序的总结(四):基于bean的客户端和服务端代码的编写

    1. 在原服务端项目 ws_server中添加两个bean 1.1 添加两个类  User 和 Clazz   package com.lonely.pojo; public class User { ...

  7. umi框架应用服务端SSR,实现数据预渲染

    当我们的应用使用服务端渲染的方式时,可能需要把初始化加载的数据例如推荐等不需要用户输入的内容直接渲染获取,也有利于SEO. 上一篇已经实现服务端渲染,本次实现服务端获取数据后在做渲染. 利用getIn ...

  8. 基于socket的客户端和服务端聊天简单使用 附Demo

    功能使用 服务端 分离一个不停接受客户端请求的线程 接受不客户端请求的线程中,再分离就收消息的线程 几大对象分别是 IPEndPoint IP终结点 服务端Socket,绑定终结点Bind,启动监听L ...

  9. 基于socket的客户端和服务端聊天机器人

    服务端代码如下: using System;using System.Net;using System.Net.Sockets;using System.Text;using System.Threa ...

随机推荐

  1. Docker容器内连接宿主机即CentOS的Mysql服务器

    docker的宿主机是虚拟机下的CentOS 博主最近遇到一种情况,从服务器拷贝了一份数据库在宿主机Mysql服务器上,想要用本地的数据库测试自己的代码正确性,但是项目程序都是靠docker一键部署的 ...

  2. 什么是内部类?Static Nested Class和Inner Class的不同?

    内部类就是在一个类的内部定义的类,内部类中不能定义静态成员,内部类可以直接访问外部类中的成员变量,内部类可以定义在外部类的方法外面,也可以定义在外部类的方法体中.在方法外部定义的内部类前面可以加上st ...

  3. 服务端处理 Watcher 实现 ?

    1.服务端接收 Watcher 并存储 接收到客户端请求,处理请求判断是否需要注册 Watcher,需要的话将数据节点 的节点路径和 ServerCnxn(ServerCnxn 代表一个客户端和服务端 ...

  4. 学习ansible(一)

    1.介绍 1 ansible基于Python开发的自动化运维工具 2 ansible基于ssh协议实现远程管理的工具,没有客户端 3 ansible软件可以实现多种批量管理操作 2.环境 主机 IP ...

  5. Netty学习摘记 —— 初步认识Netty核心组件

    本文参考 我在博客内关于"Netty学习摘记"的系列文章主要是对<Netty in action>一书的学习摘记,文章中的代码也大多来自此书的github仓库,加上了一 ...

  6. vulnhub mrRobot渗透笔记

    mrRobot渗透笔记 靶机下载地址:https://www.vulnhub.com/entry/mr-robot-1,151/ kali ip 信息收集 首先依旧时使用nmap扫描靶机的ip地址 n ...

  7. 8 个有用的 HTML5 标签

    作为一个 web 前端开发者,在制作页面的时候你会从一大堆不同的标签中选择合适的标签来完成相应的功能.有些 HTML5 标签广为流传,例如 <article> <header> ...

  8. 可想实现一个自己的简单jQuery库?(五)

    Lesson-4 这个版本我们要增加一个用的非常多的方法! 那就是each! 我们知道each不仅能遍历数组,还能遍历对象. 首先我们需要一个对数组进行验证的方法 function isArray(o ...

  9. Vulnhub 之 Earth

    靶机地址:https://www.vulnhub.com/entry/the-planets-earth,755/ Kali IP:192.168.56.104 下载OVA文件后,直接通过Virtua ...

  10. 爬虫---scrapy架构和原理

    scrapy是一个为了爬取网站数据, 提取结构性数据而编写的应用框架, 它是基于Twisted框架开发而来, 而Twisted框架是事件驱动的, 比较适合异步代码. 对会阻塞线程的操作, 包括访问数据 ...