![](https://img-blog.csdnimg.cn/20191217161551184.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
koa与node.js 开发实战
文章平均质量分 60
koa、node.js 学习笔记
luckybing~
一个积极向上、乐观开朗、遇到Bug想一晚上、没秃顶、会写段子的web前端工程师
展开
-
(一)
(1)node 是单线程的,利用事件循环处理,异步I/O,而不是为每一个请求提供一个线程,资源占用很少(2)node 模块的引入采用缓存的模式,Node对引入过的模块都会进行缓存,以减少二次引入时的开销。(3)JavaScript核心模块的编译过程 1)转存为 c/c++ 代码:在这个过程中,JavaScript代码以字符串的形式存储在node命名空间中,是不可直接执行的。 2)编译JavaScript核心模块(4)在核心模块中,有些模块全部由C/C++编写,...原创 2021-02-19 14:44:37 · 102 阅读 · 0 评论 -
(一)项目实战
肝了一周。。终于把 node 、koa 的基础知识学完了。。长舒一口气。。看了一下工作中中间层的代码,大部分都能看懂了,还是很有收获的,下面我就开始实战了,实战中的项目参考了 从0 到 1 搭建微博、书籍《 Koa 和 Node.js 开发实战》这两个项目,下面把项目中的收获记录在这里。这两个项目 的 技术选型:vue + node + koa + mysql + ejs微博的项目我准备手打代码:https://github.com/123luckybing/sina_weibo.git ,代码放在 g原创 2020-09-11 17:33:23 · 164 阅读 · 0 评论 -
(八)koa 脚手架
koa 脚手架 koa-generator1. 全局安装npm i koa-generator -g2. 创建koa脚手架项目比如项目名称叫 sina_weibokoa sina_weibo3. 进入项目目录cd sina_weibo4. 在项目中安装依赖 npm i5. 启动项目npm start端口号默认 3000,http://local.djtest.cn:3000/(二)cross-env 的使用看这个:https://www.原创 2020-09-11 13:55:17 · 238 阅读 · 1 评论 -
(七)Koa原生路由的实现
(一) 代码const Koa = require('koa');const fs = require('fs');const app = new Koa(); app.use(async(ctx)=>{ // 获取用户访问的路由信息 let url = ctx.request.url; // 通过路由信息进行对应的fs文件写入 let html = await route(url); // 回传写入的文件给前台解析 ctx.body=html;}) app原创 2020-09-11 11:42:57 · 174 阅读 · 0 评论 -
(六)session 相关
(一) session 介绍session 也是一种缓存,与cookie不同的是,cookie 是在客户端(浏览器),而session是在服务端,存储位置不同(二)session 工作原理当浏览器发送第一次请求时,服务端会建立一个session对象,生成一个类似于 key、value 的键值对,然后将 key (cookie) 返回到浏览器),也就是客户端,当浏览器再次访问的时候,携带 key (cookie),找到相应的 session(value),客户的信息都保存在 session 中,服原创 2020-09-10 22:59:39 · 102 阅读 · 0 评论 -
(五)koa 中的 cookie 相关
cookie 保存在浏览器客户端,可以让我们用同一个浏览器访问统一域名下的共享数据(一)设置 cookiectx.cookies.set(key, value, options)options:选择填写httpOnly: false 客户端也可以访问httpOnly: true,只有服务端可以访问(二) 获取cookiectx.cookies.get(key)完整例子代码:const Koa = require('koa')const app = new ..原创 2020-09-10 19:39:06 · 257 阅读 · 0 评论 -
(四)koa-static 静态资源
之前说过,当服务器遇到 src、href 等链接外部资源的标签时,会把 引用路径当作 res.url 路径去请求,那么在 koa 中遇到这种情况,需要借助于 中间件 koa-static(1) 安装 koa-staticnpm i koa-static --save(2) 使用代码:const Koa = require('koa')const app = new Koa()const views = require('koa-views')const bodyparser =原创 2020-09-10 18:12:30 · 707 阅读 · 0 评论 -
(三)获取 post 数据
(一)node 原生:const http = require('http')http.createServer((req, res) => { if (req.method === 'POST') { let postData = '' try { // 接受中 req.on('data', (data) => { // data 是 Buffer 的 二进制数据 postData += data原创 2020-09-10 18:12:17 · 283 阅读 · 0 评论 -
(二)Koa 路由、中间件
(一)什么是路由路由(Router)是有一个 URL (路径)和一个特定的 HTTP 方法(GET、POST 等)组成的,涉及到应用如何响应客户端对某个网站节点的访问通俗的说:路由就是根据不同的 url 地址,加载不同的页面,实现不用的功能在 Koa 中,路由要借助中间件 koa-router 来实现npm i koa-router --save(二)使用路由 get 请求以及动态路由// 引入const Koa = require('koa')const Router =原创 2020-09-10 15:59:08 · 437 阅读 · 0 评论 -
回调函数 async函数本质
1. 自己实现一个回调函数function add (x, y ,callback) { setTimeout(() => { var sum = x + y callback(sum) }, 2000)}add(1, 2, (result) => { console.log(result)})2s 后控制台输出32. async 函数执行结果 本质是一个 Promiseasync function sum () {}console.l原创 2020-09-10 12:10:16 · 279 阅读 · 0 评论 -
基于 Node.js 打造 Web 中间层
(一)什么是中间层中间层(Middle Tier)也称作 应用程序服务器层 或应用服务层,是用户接口或 Web 客户端 与 数据库 之间的逻辑层。(二)图解中间层简单说就是在 客户端 和 服务端 之间架起来的一层。(三)什么是中间件中间件可以理解为一个对用户请求进行过滤和预处理的东西,它一般不会直接对客户端进行响应,而是将处理后的结果传递下去。我们可以把中间件理解...原创 2019-11-26 21:05:57 · 673 阅读 · 0 评论 -
node 中间层代码篇
首先新建一个文件夹,文件夹下建 app.js (入口)、router(路由)、template(模板)、static(静态资源)然后 npm init 建立 package.json1. 下载koa、koa-router、koa-ejskoa: 基础框架koa-router: 路由koa-ejs: 生成页面模板koa-better-body: 中间件 解析数据koa-c...原创 2019-11-29 09:34:49 · 309 阅读 · 0 评论 -
(十四)path 模块、package.json
(一) path 的一些方法const path = require('path')const pathString = '/Users/macbook/Desktop/complier/index.js'// dirname 显示目录var dirname = path.dirname(pathString)console.log(dirname) // /Users/macbook/Desktop/complier// basename 文件名称var basename = pat原创 2020-09-10 12:03:22 · 469 阅读 · 0 评论 -
(一)Koa2
大佬笔记:https://chenshenhai.github.io/koa2-note/以下是看完笔记之后的补充:(一)初探安装Koa 啥的我就不说了,看看官方例子// 引入const Koa = require('koa')// 创建实例const app = new Koa()// 监听请求app.use(async (ctx) => { ctx.body = 'index Page'})// 绑定端口号app.listen(3000, () => {原创 2020-09-10 01:07:20 · 219 阅读 · 0 评论 -
(十三)查缺补漏
1. require:也会执行被加载模块中的代码index.js:require('./test.js')test.jsconsole.log('111')执行 node index.js之前主要用法是把 require 的结果赋值,然后调用结果中的对象KEY~2.原创 2020-09-08 11:29:48 · 171 阅读 · 0 评论 -
(十二)url 模块以及实现重定向
(一)url 模块会对地址栏输入的进行处理(二) 比如我在地址栏输入:http://localhost:8000/detail?id=12306&name=lucyvar http = require('http')var fs = require('fs')var url = require('url')http.createServer((req, res) => { // 域名/后面的所有 console.log(req.url) // /detail?id=1原创 2020-09-07 19:48:50 · 411 阅读 · 0 评论 -
(十一)处理网站中的静态资源以及404页面
1. 搭建服务器注意,监听请求和启动端口合并了var http = require('http')var fs = require('fs')http.createServer((req, res) => { console.log(req.url) if (req.url === '/') { fs.readFile('./views/index.html', (err, data) => { if (err) { return re原创 2020-09-07 16:47:01 · 14211 阅读 · 0 评论 -
SSR 服务端渲染
(一)什么是服务端渲染SSR就是将组件或者页面通过服务器生成 html 字符串,再发送到浏览器,最后将静态标记混合为客户端上完全交互的应用程序SSR 是 serve side render 的缩写,由服务端完成页面的生成(二)什么是渲染生成 html 页面的过程(包括数据)(三)页面的生成过程(四)客户端渲染和服务端最重要的区别究竟是有谁来完成 html 页面的完整...原创 2019-12-02 11:29:33 · 462 阅读 · 0 评论 -
(十)在 Node 中使用模版引擎
知乎上这篇文章感觉很不错:https://zhuanlan.zhihu.com/p/52722144主要就不写代码啦~原创 2020-09-07 10:40:24 · 196 阅读 · 0 评论 -
(九) 响应内容类型 Content-Type
1. 不设置 Content-typevar http = require('http')var server = http.createServer()server.listen(8000, () => { console.log('server is running at 8000')})server.on('request', (req, res) => { if (req.url === '/') { var person = { age: 23原创 2020-09-06 14:04:17 · 1259 阅读 · 0 评论 -
(八)ip 地址和端口
(一)概述(1)IP 地址用来定位计算机(2)端口号用来定位计算机上具体的应用程序(3)在计算机中,一切需要联网通信的软件都会占用一个端口号(4)端口号的范围从 0 - 65536 之间(5)在计算机中,有一些默认的端口号,最好不要去使用,比如http服务的80,在开发中使用一些好记的就行了,比如 8000,8001,3001 等等以上就是ip 地址和端口 的知识点~举个例子,我在vue进行项目开发中,启动了两个项目,一个是本地node中间层,端口号是 3001,一个是vue项.原创 2020-09-06 11:59:30 · 503 阅读 · 0 评论 -
(七)使用node搭建服务器
node 中的http模块是与网络相关的模块(一)搭建一个简易服务器var http = require('http');// 建立一个服务 http.createServer()var server = http.createServer()// 启动服务// .listen(port, callback)server.listen(3000, () => { console.log('server is running on port 3000')})// 监听请求/原创 2020-09-06 02:51:12 · 311 阅读 · 0 评论 -
(六)文件读取
(一)简单文件读取1. 代码:var fs = require('fs')// fs.readFile 读文件// 第一个参数:要读取的文件路径// 第二个参数:读出来的数据 注意是个Bufferfs.readFile('./hello.js', (err, data) => { if (err) { console.log(err) } else { console.log(data) }})输出:<Buffer e6 88 91 e6原创 2020-09-05 14:09:41 · 158 阅读 · 0 评论 -
(五)文件系统
(一)文件系统在 Node 中,文件系统是非常重要的,服务端的本质就是将本地的文件发送给远程的客户端。Node 通过 fs 模块和文件系统进行交互,文件系统简单来说就是通过Node来操作系统中的文件(二)同步和异步fs模块中所有的操作都可以通过同步和异步来选择同步:会阻塞程序执行,一行执行完才能执行下一行异步:不会阻塞异步执行,而是在操作完成时,通过回调函数结果将其返回(三)文件的写入同步写入:// 引入fs模块const fs = require('fs')// 写文原创 2020-09-05 11:31:14 · 138 阅读 · 0 评论 -
(四)Buffer 缓冲区
(一)Buffer (缓冲区)1. Buffer 的结构和数组很像,操作的方法也和数组类似为什么有数组了还要新发明一个Buffer呢?(1)数组是js语法,js代码性能较差(2)数组中可以存的数据类型有限,传统的数组不能满足服务端所需的数据类型的需求,比如音频、视频、图片等二进制文件,而Buffer就是专门用来存储二进制文件的(3) 使用Buffer不需要引入模块,直接用即可(二)代码演示1. 将一个字符串保存在BufferBuffer.from 语法var str =原创 2020-09-05 02:49:21 · 960 阅读 · 0 评论 -
(三)npm 包
1. CommonJS 的包规范由【包结构】和【包描述文件】两部分组成包结构:用于组织包中的各种文件包描述文件:描述包的相关信息,用于外部了解 (package.json)2. json 文件是不可以写注释的,比如 package.json3. npm 命令相关// 移除包npm remove 包名称npm r 包名称// 安装包并且显示到依赖, 在 package.json中可以看到// npm i 包名称 在package.json看不到npm i 包名称 --save原创 2020-09-05 01:07:32 · 228 阅读 · 0 评论 -
(二)module.exports 和 exports
虽然两者在 模块中 === 返回结果是 true,但是用法还是不同的(1)module.exports使用:赋值是一个对象module.exports = { name: 'zfb', age: 23}引入:var content = require('./test')console.log(content.name) // zfb(2)exports...原创 2020-09-04 19:09:35 · 268 阅读 · 0 评论 -
(一)Node.js 模块化详解
(一)模块的分类我们知道,在 node.js 中,通过 require 来引入外部模块,引入外部模块需要使用模块标识,通过模块标识来找到指定的模块。外部模块一般分为两大类:核心模块和文件模块(1)核心模块由Node本身提供的模块,模块标识是模块的名字var path = require('path')(2)文件模块由用户自己创建的模块,模块的标识是模块的路径const ENV = require('../src/utils/env')(二)模块的本质如何验证模块是函数原创 2020-09-04 13:31:08 · 320 阅读 · 0 评论 -
node 自己写接口
node.jsconst http = require('http')const fs = require('fs')const url = require('url')const queryString = require('querystring')http.createServer((request, response) => { const parseUrl = url.parse(request.url) // 判断接口 if (parseUrl.pathname原创 2020-05-13 19:59:19 · 241 阅读 · 0 评论 -
node模块相关
1. 引入一个模块但是不调用相当于执行调用模块的代码index.jsconst doIt = require('./lib.js')lib.jsfunction consoleSomething() { setTimeout(() => { console.log(1) }, 1000)}consoleSomething()module.expo...原创 2020-05-06 15:06:34 · 122 阅读 · 0 评论 -
(一)node 初探
1. 拿到启动 node 文件时输入的参数index.jsconsole.log(process.argv)启动: node index.js test控制台打印:是一个数组[ '/usr/local/bin/node', '/Users/macbook/Desktop/node/index.js', 'test' ]所以拿到参数:参数从第三个开始c...原创 2020-05-04 10:41:18 · 136 阅读 · 0 评论