nextjs作为koa中间件的使用
react客户端渲染的缺点:首屏速度慢,对SEO不友好
浏览器请求步骤 客户端跳转
1. 浏览器发起请求 /index 1. 点击按钮
2. koa接受请求,并且调用nextjs 2. 异步加载组件的js
3. nextjs开始渲染 3. 调用页面的getInitialProps
4. 调用app的getInitialProps 4. 数据返回,页面跳转
5. 调用页面的 getInitialProps 5. 渲染新页面
6. 渲染出最终的 html
7. 返回给浏览器
^ 表示升级小版本,不会升级大的版本
大版本一般只有大改动,才会更新
小版本一般是修复bug, 次版本是一些细微修改
创建next项目的方式
一. 手动创建
npm init yarn add react react-dom next
"dev": "next" "start": "next start" 启动正式的服务 "build": "next build"
二. 使用 create-next-app
npm i -g create-next-app
npx create-next-app app-project
yarn create app-project
create-next-app app-project
在pages里面没有引入 React, 是因为在全局中已经引入了
React.createElement('div', {} , 'hello')
nextjs 自身带有服务器,但是只处理 ssr渲染
处理HTTP请求,并且根据请求返回响应的内容
无法处理服务器 数据接口 数据库连接 session状态
koa是一个非常流行的轻量nodejs服务端框架,本身不封装什么功能
非常易于扩展,变成范式非常符合js特性
next作为koa的一个中间价
const Koa = require('koa')
const next = require('next')
const dev = process.env.NODE_ENV !== 'production' // 名字必须是这一个名字
const app = next({ dev})
const handler = app.getRequestHandler() //
app.prepare().then(()=>{ // 等待页面编译完成
const server = new Koa()
server.use(async (ctx,next)=>{
await handler(ctx.req,ctx.res) // 等待nextjs执行完成
ctx.respond = false
})
server.listen(3000,()=>{
console.log('listen on 3000')
})
})

返回 render2
koa-router是 koa的一个中间件

server.use(router,routes())
ctx.param.id
ctx.res ctx.req 原生的
ctx.response ctx.request 封装后的Koa对象
ctx.body = { success: true } ctx.set('content-type', 'application/json')
requirepass 密码 配置文件配置项
redis-cli -p 6379
> auth 12345 就可以正确操作了
> setenx c 10 1 设置过期时间 del c 删除
ioredis 连接Redis
nextjs默认不支持 css文件引入 为什么? 建议 css in js
yarn add @zeit/next-css
next.config.js 配置文件


如何分模块加载组件 不包括css文件
_app.js

const withCss = require("@zeit/next-css")
if (require !== 'undefined'){
require.extensions['.css'] = file=>{}
}
module.exports = withCss({})
hoc的使用
export default (Comp) => {
function hoc({Component, pageProps, ...test}){
if(pageProps){ // 并不是每个页面都有 pageProps
pageProps.teid=123456;
}
return <Comp Component={Component} pageProps={pageProps} {...test} />
}
hoc.getInitialProps = Comp.getInitialProps; // 这一个非常关键
return hoc;
}
nextjs作为koa中间件的使用的更多相关文章
- koa中间件系统原理及koa+orm2实践。
koa是由 Express 原班人马打造的新的web框架.套用其官方的说法:Koa 应用是一个包含一系列中间件 generator 函数的对象. 这些中间件函数基于 request 请求以一个类似于栈 ...
- KOA中间件的基本运作原理
示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文目录 华为云社区地址:[你要的前端打怪升级指南] 在中 ...
- koa 中间件
什么是 Koa 的中间件 通俗的讲:中间件就是匹配路由之前或者匹配路由完成做的一系列的操作,我们就可以 把它叫做中间件. 在express中间件(Middleware)是一个函数,它可以访问请求对象( ...
- 【nodejs原理&源码赏析(2)】KOA中间件的基本运作原理
[摘要] KOA中间件的基本运作原理 示例代码托管在:http://www.github.com/dashnowords/blogs 在中间件系统的实现上,KOA中间件通过async/await来在不 ...
- Koa - 中间件(理解中间件、实现一个验证token中间件)
前言 Koa 应用程序是一个包含一组中间件函数的对象,它是按照类似堆栈的方式组织和执行的. 当一个中间件调用 next() 则该函数暂停并将控制传递给定义的下一个中间件.当在下游没有更多的中间件执行后 ...
- Koa中间件(middleware)级联原理
前言 上次看到了koa-compose的代码,今天来说一下koa中间件的级联以及工作原理. 中间件工作原理 初始化koa实例后,我们会用use方法来加载中间件(middleware),会有一个数组来存 ...
- Koa 中间件的执行
Node.js 中请求的处理 讨论 Koa 中间件前,先看原生 Node.js 中是如何创建 server 和处理请求的. node_server.js const http = require(&q ...
- koa 基础(八)koa 中间件的执行顺序
1.koa 中间件的执行顺序 app.js /** * koa 中间件的执行顺序 */ // 引入模块 const Koa = require('koa'); const router = requi ...
- Koa与Node.js开发实战(2)——使用Koa中间件获取响应时间(视频演示)
学习架构: 在实战项目中,经常需要记录下服务器的响应时间,也就是从服务器接收到HTTP请求,到最终返回给客户端之间所耗时长.在Koa应用中,利用中间件机制可以很方便的实现这一功能.代码如下所示: 01 ...
随机推荐
- day94_11_26爬虫find与findall
一.使用json 正常的,如果需要将response结果序列化,需要将结果json.loads res1=json.loads(response.text) 但是这样会很麻烦,request提供了js ...
- AcWing 34. 链表中环的入口结点
习题地址 https://www.acwing.com/problem/content/description/86/ 题目描述给定一个链表,若其中包含环,则输出环的入口节点. 若其中不包含环,则输出 ...
- WPF 精修篇 拖拽 DragDrop
原文:WPF 精修篇 拖拽 DragDrop WPF 实现拖拽 效果 <Grid> <Grid.ColumnDefinitions> <ColumnDefinition ...
- Linux服务器下配置Java环境、JDK
前言 可以解决问题有/etc/profile与~/.bashrc环境文件区别 文件权限问题,只读readonly Java环境搭建 一.下载JDK包 地址:jdk1.8提取码:gx0b 把文件放到Li ...
- 函数高级实战之ATM和购物车系统升级
一.项目 二.项目地址 https://github.com/nickchen121/atm 三.功能需求 FUNC_MSG = { '0': '注销', '1': '登录', '2': '注册', ...
- 转载-ThreadPoolExecutor里面4种拒绝策略(详细)
原文链接:https://blog.csdn.net/wjs19930820/article/details/79849050 1 /** * 定义异步任务执行线程池 */ @Configuratio ...
- MQ的深入理解
MQ的深入理解 MQ的作用: 解耦合,降低系统与系统之间的频繁改动 MQ的特点: 复杂的系统解耦合 (主系统将数据放入mq,子系统需要的时候直接从mq中取出数据)复杂链路的异步调用(将必要的链路执行完 ...
- 【linux运维】linux系统上忘记密码如何操作
目录 红帽系统忘记密码操作 红帽系统设置ip,主机名 centos系统忘记密码操作 一.红帽系统忘记密码操作 1)再出现以下界面后按键盘e键 2)进入以下界面后,再次按e键 3)使用上下键选择第2项或 ...
- XML与DTD(够用)
1: 概述 1.1 什么是XML 1.2 三个重点 1.3规则 1.4 常用转义 2: Xml声明 XML 中,空格会被保留 XML 以 LF 存储换行 3:Xml标签 4:Xml元素 5:XML 属 ...
- NET EF 连接Oracle 的配置方法记录
主要记录下如何在EF 中连接Oracle s数据库,很傻瓜式,非常简单,但是不知道的童鞋,也会搞得很难受,我自己就是 1.创一个控制台程序,并且添加 Oracle.ManagedDataAccess ...