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中间件的使用的更多相关文章

  1. koa中间件系统原理及koa+orm2实践。

    koa是由 Express 原班人马打造的新的web框架.套用其官方的说法:Koa 应用是一个包含一系列中间件 generator 函数的对象. 这些中间件函数基于 request 请求以一个类似于栈 ...

  2. KOA中间件的基本运作原理

    示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文目录 华为云社区地址:[你要的前端打怪升级指南] 在中 ...

  3. koa 中间件

    什么是 Koa 的中间件 通俗的讲:中间件就是匹配路由之前或者匹配路由完成做的一系列的操作,我们就可以 把它叫做中间件. 在express中间件(Middleware)是一个函数,它可以访问请求对象( ...

  4. 【nodejs原理&源码赏析(2)】KOA中间件的基本运作原理

    [摘要] KOA中间件的基本运作原理 示例代码托管在:http://www.github.com/dashnowords/blogs 在中间件系统的实现上,KOA中间件通过async/await来在不 ...

  5. Koa - 中间件(理解中间件、实现一个验证token中间件)

    前言 Koa 应用程序是一个包含一组中间件函数的对象,它是按照类似堆栈的方式组织和执行的. 当一个中间件调用 next() 则该函数暂停并将控制传递给定义的下一个中间件.当在下游没有更多的中间件执行后 ...

  6. Koa中间件(middleware)级联原理

    前言 上次看到了koa-compose的代码,今天来说一下koa中间件的级联以及工作原理. 中间件工作原理 初始化koa实例后,我们会用use方法来加载中间件(middleware),会有一个数组来存 ...

  7. Koa 中间件的执行

    Node.js 中请求的处理 讨论 Koa 中间件前,先看原生 Node.js 中是如何创建 server 和处理请求的. node_server.js const http = require(&q ...

  8. koa 基础(八)koa 中间件的执行顺序

    1.koa 中间件的执行顺序 app.js /** * koa 中间件的执行顺序 */ // 引入模块 const Koa = require('koa'); const router = requi ...

  9. Koa与Node.js开发实战(2)——使用Koa中间件获取响应时间(视频演示)

    学习架构: 在实战项目中,经常需要记录下服务器的响应时间,也就是从服务器接收到HTTP请求,到最终返回给客户端之间所耗时长.在Koa应用中,利用中间件机制可以很方便的实现这一功能.代码如下所示: 01 ...

随机推荐

  1. Vue 时间修饰符之使用$event和prevent修饰符操作表单

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. DirectShow 常用函数总结

    本文准备总结一些 Direct Show 常用的API接口函数,方便以后查询回忆.如果这里没有你想了解的函数,你可以自行搜索MSDN + 函数名去 MSDN 查找你想要了解的函数,也可以查看百度百科相 ...

  3. IT兄弟连 HTML5教程 了解HTML5的主流应用3

    5  基于HTML5的移动APP开发 不同的操作系统中,需要安装用不同技术开发的APP,移动端的操作系统有很多种,但最主要有两大分支,一种在苹果iOS操作系统中使用Objective-C语言开发APP ...

  4. 纯js的统计图插件-统计图

    第一次写博客,写的不到望大家见谅! 今天给大家分享一个纯js的插件(统计图),有知道的可以在下面评论一起谈论一下,刚学着的时候,我是看了好久才看懂的一个基本结构,到后来我才知道原来直接去原网站上找到复 ...

  5. 数据库——SQL-SERVER练习(6) 数据库安全性

    一.实验准备 (1)运行SQL-SERVER服务管理器, 启动服务(2)运行查询分析器,  以DBA身份登录数据库服务器:      用户名sa,  密码123456(3)打开CREATE-TABLE ...

  6. [IDA]批量载入结构体

    我们之前介绍了如果单独定义一个C结构体并转换为IDA中的结构体. 但是,在内核中有很多庞大的结构体,一环接着一环,手动导入不现实. 还存在一个问题,可能大小格式不匹配. 之前有一位老哥推荐我一个工具: ...

  7. java高并发系列 - 第13天:JUC中的Condition对象

    本文目标: synchronized中实现线程等待和唤醒 Condition简介及常用方法介绍及相关示例 使用Condition实现生产者消费者 使用Condition实现同步阻塞队列 Object对 ...

  8. oracle学习笔记(九) SQL常用函数说明以及使用

    SQL常用函数说明以及使用 以下补充以下常用的函数,更多的请看oracle函数API文档 to_char to_char(8.58,'9.99') to_char(8.50,'9.00') to_ch ...

  9. java核心技术第三篇之JDBC第一篇

    01.JDBC_两个重要的概念: 1).什么是数据库驱动程序:由数据库厂商提供,面向某种特定的编程语言所开发的一套访问本数据库的类库. 驱动包一般由两种语言组成,前端是:面向某种特定编程语言的语言:后 ...

  10. swif(六)swift闭包

    // // main.swift // LessonSwiftSix // // Created by keyan on 15/9/13. // Copyright (c) 2015年 keyan. ...