基于Koa与umi实现服务端(SSR)渲染
工具:
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)渲染的更多相关文章
- Pomelo:网易开源基于 Node.js 的游戏服务端框架
Pomelo:网易开源基于 Node.js 的游戏服务端框架 https://github.com/NetEase/pomelo/wiki/Home-in-Chinese
- 基于JAX-WS的Web Service服务端/客户端 ;JAX-WS + Spring 开发webservice
一.基于JAX-WS的Web Service服务端/客户端 下面描述的是在main函数中使用JAX-WS的Web Service的方法,不是在web工程里访问,在web工程里访问,参加第二节. JAX ...
- 服务端预渲染之Nuxt(介绍篇)
现在前端开发一般都是前后端分离,mvvm和mvc的开发框架,如Angular.React和Vue等,虽然写框架能够使我们快速的完成开发,但是由于前后台分离,给项目SEO带来很大的不便,搜索引擎在检索的 ...
- 服务端预渲染之Nuxt (使用篇)
服务端预渲染之Nuxt - 使用 现在大多数开发都是基于Vue或者React开发的,能够达到快速开发的效果,也有一些不足的地方,Nuxt能够在服务端做出渲染,然后让搜索引擎在爬取数据的时候能够读到当前 ...
- 基于PlatinumKit库的DLNA服务端开发
首先,需要特别感谢蓝斯老师的资料,我这里有很大一部分是参考蓝斯老师的,附上传送门:http://blog.csdn.net/lancees/article/details/9178385 一.DLNA ...
- 使用CXF开发WebService程序的总结(四):基于bean的客户端和服务端代码的编写
1. 在原服务端项目 ws_server中添加两个bean 1.1 添加两个类 User 和 Clazz package com.lonely.pojo; public class User { ...
- umi框架应用服务端SSR,实现数据预渲染
当我们的应用使用服务端渲染的方式时,可能需要把初始化加载的数据例如推荐等不需要用户输入的内容直接渲染获取,也有利于SEO. 上一篇已经实现服务端渲染,本次实现服务端获取数据后在做渲染. 利用getIn ...
- 基于socket的客户端和服务端聊天简单使用 附Demo
功能使用 服务端 分离一个不停接受客户端请求的线程 接受不客户端请求的线程中,再分离就收消息的线程 几大对象分别是 IPEndPoint IP终结点 服务端Socket,绑定终结点Bind,启动监听L ...
- 基于socket的客户端和服务端聊天机器人
服务端代码如下: using System;using System.Net;using System.Net.Sockets;using System.Text;using System.Threa ...
随机推荐
- ApplicationContext通常的实现是什么?
FileSystemXmlApplicationContext :此容器从一个XML文件中加载beans的定义,XML Bean 配置文件的全路径名必须提供给它的构造函数. ClassPathXmlA ...
- springboot-访问数据库
在springboot中,默认的JPA实现是Hibernate,JPA是Java Persistence API的简称,中文名Java持久层API <!--数据库--> <depen ...
- List、Map、Set 三个接口存取元素时,各有什么特点?
List 以特定索引来存取元素,可以有重复元素.Set 不能存放重复元素(用对象的 equals()方法来区分元素是否重复).Map 保存键值对(key-value pair)映射, 映射关系可以是一 ...
- 详解Mysql事务隔离级别与锁机制
一.概述 我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能 就会导致我们说的脏写. 胀读和不可重复读.幻读这些问题. 这些问题的本质都是数据库的多事务并 ...
- Python中对象、类型、元类之间的关系
Python里的对象.类型和元类的关系很微妙也很有意思. 1989年圣诞节期间,上帝很无聊,于是创造了一个世界. 对象 在这个世界的运转有几条定律. 1.一切都是对象 对象(object)是这个世界的 ...
- ES6-11学习笔记--数值的扩展
二进制 0B 八进制 0O Number.isFinite() , Number.isNaN() Number.parseInt() , Number.parseFloat() Number ...
- 设计模式-观察者模式Observe的实现
using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> / ...
- idea maven web项目tomcat本地部署
条件:1.安装jdk 2.安装tomcat idea 创建maven web项目部署在 tomcat maven plugin中 本地部署: 1.新建maven web项目 2.输入项目名称 3. ...
- 基于PromiseA+规范实现一个promise
实现如果下规范的promise Aplus规范 1,promise是一个类:有三个状态 pending/等待态 fulfilled/成功态 rejected/失败态 2,promise默认执行器立即执 ...
- Mysql_事务_存储过程_触发器
一.什么是事务? 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务通常由高级数据库操纵语言或编程语言( ...