node.js学习笔记之koa框架和简单爬虫练习

Koa -- 基于 Node.js 平台的下一代 web 开发框架

koa是由 Express 原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的 Web 框架。 使用 koa 编写 web 应用,可以免除重复繁琐的回调函数嵌套, 并极大地提升错误处理的效率。koa 不在内核方法中绑定任何中间件, 它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手。开发思路和express差不多,最大的特点就是可以避免异步嵌套。koa2利用ES7的async/await特性,极大的解决了我们在做nodejs开发的时候异步给我们带来的烦恼。

英文官网:http://koajs.com

中文官网:http://koajs.cn

1.koa

安装koa包: npm i -S koa@latest
引入: const koa = require("koa");
实例化对象: const app = new koa;

通过实例操作,专门用于客户端请求的函数叫做中间件,使用use()注册

use()函数中必须使用异步 async; use可是调用无数次;

其中有两个参数:

a)ctx: 上下文环境,node的请求和响应对象,其中不建议使用node原生的req和res属性,使用koa封装的requset和response属性

b)next: next(),将本次控制权交给下一个中间件。

最后一个中间件使用next()无意义,执行完控制权返回上一层,直至第一个。

1. next参数的使用demo

const Koa = require("koa");
const koa = new Koa();
//中间件1
koa.use(async (ctx, next) => {
console.log("1 , 接收请求控制权");
await next(); //将控制权传给下一个中间件
console.log("1 , 返回请求控制权");
});    //将中间件注册到koa的实例上

//中间件2
koa.use(async (ctx, next) => {
 console.log("2 , 接收请求控制权");
await next();
console.log("2 , 返回请求控制权");
}); 

//中间件3
koa.use(async (ctx, next) => {
console.log("3 , 接收请求控制权");
 console.log("3 ,返回请求控制权");
});
koa.listen(3000, ()=>{
 console.log("开始监听3000端口");
});

注:当中间件中没有next(),不会执行下面的中间件

访问localhost:3000的效果图;

注:会有两次操作是因为图标icon也会请求一次

2.ctx参数的使用demo

const Koa = require("koa");
const koa = new Koa();
koa.use(async (ctx, next)=>{
 ctx.body = "body可以返回数据,";
 ctx.body += "可以多次调用,";
 ctx.body += "不需要end()";
});
koa.listen(3000, ()=>{
 console.log("监听开始");
});

效果:

ctx.url ,ctx.path ,ctx.query ,ctx.querystring ,ctx.state ,ctx.type

const Koa = require("koa");
const koa = new Koa();
koa.use(async (ctx, next)=>{
 ctx.body = ctx.url;
 ctx.body = ctx.path;
 ctx.body = ctx.query;
 ctx.body = ctx.querystring;
});
koa.listen(3000, ()=>{
 console.log("监听开始");
});

访问http://localhost:3000/path?name=sjl&age=18为例,效果图:

1. url: 整个路径

2. path: 非查询部分

3. query: 将查询部分转为JSON对象

4. querystring: 将查询部分转为字符串

5. ctx.state ,ctx.type 表示状态吗和类型

2.简单爬虫练习

安装request,cheerio模块

npm i -S request: 请求模块
npm i -S cheerio: 抓取页面模块(JQ核心)

抓取网页数据案例(随机网页)

//导入模块
const request = require("superagent"); //导入请求模块
const cheerio = require("cheerio");
const {join} = require("path");
const fs = require("fs");

let arr = [], //存放数据
 reg = /\n|\s+/g, //replace中使用
 url = "https://www.shiguangkey.com/course/search?key=%E5%89%8D%E7%AB%AF/";
request
 .get(url)
 .end((err, res) => {
  const $ = cheerio.load(res.text); //把字符串内的标签当成dom来使用
  $(".course-item").each((i, v) => {
   // v当前进来的dom,根据网页的布局结构来找到准确的dom节点
   const obj = {
    imgSrc : $(v).find("img").prop("src"),
    price : $(v).find(".fr span").text().replace(reg, ""),
    total : $(v).find(".item-txt").text().replace(reg, ""),
    href : join(url + $(v).find(".cimg").prop("href"))
   };
   console.log(join(url + $(v).find(".cimg").prop("href"))); //拼接
   arr.push(obj); //把对象放进数组里
  });

  fs.writeFile("./sjl.json", JSON.stringify(arr)); //将爬到的数据写入文档中
 });

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 基于Koa(nodejs框架)对json文件进行增删改查的示例代码

    想使用nodejs(koa)搭建一个完整的前后端,完成数据的增删改查,又不想使用数据库,那使用json文件吧. 本文介绍了基于koa的json文件的增.删.改.查. 代码准备 const Koa = require('koa') const bodyParser = require('koa-bodyparser') const Router = require('koa-router') const fs = require('fs') const path = require('path')

  • 利用Node.js+Koa框架实现前后端交互的方法

    前言 对于一个前端工程师来说不仅仅要会前端的内容,后端的技术也需要熟练掌握.今天我就要通过一个案例来描述一下前端是如何和后端进行数据交互的. koa 是由 Express 原班人马打造的,致力于成为一个更小.更富有表现力.更健壮的 Web 框架.使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升错误处理的效率.koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手. 准备工作 首先

  • 如何从零开始手写Koa2框架

    01.介绍 Koa-- 基于 Node.js 平台的下一代 web 开发框架 Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小.更富有表现力.更健壮的基石. 与其对应的 Express 来比,Koa 更加小巧.精壮,本文将带大家从零开始实现 Koa 的源码,从根源上解决大家对 Koa 的困惑 本文 Koa 版本为 2.7.0, 版本不一样源码可能会有变动 02.源码目录介绍 Koa 源码目录截图 通过源码目录可以

  • Node.js的Koa框架上手及MySQL操作指南

    由 Express 原班人马打造的 koa,致力于成为一个更小.更健壮.更富有表现力的 Web 框架.使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升常用错误处理效率.Koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手. 安装koa koa 依赖支持 generator 的 Node 环境,也就是说,node的版本要在 0.11.9 或者更高,否则将无法执行. 用npm: $

  • 如何从头实现一个node.js的koa框架

    前言 koa.js是最流行的node.js后端框架之一,有很多网站都使用koa进行开发,同时社区也涌现出了一大批基于koa封装的企业级框架.然而,在这些亮眼的成绩背后,作为核心引擎的koa代码库本身,却非常的精简,不得不让人惊叹于其巧妙的设计. 在平时的工作开发中,笔者是koa的重度用户,因此对其背后的原理自然也是非常感兴趣,因此在闲暇之余进行了研究.不过本篇文章,并不是源码分析,而是从相反的角度,向大家展示如何从头开发实现一个koa框架,在这个过程中,koa中最重要的几个概念和原理都会得到展现

  • node.js学习笔记之koa框架和简单爬虫练习

    Koa -- 基于 Node.js 平台的下一代 web 开发框架 koa是由 Express 原班人马打造的,致力于成为一个更小.更富有表现力.更健壮的 Web 框架. 使用 koa 编写 web 应用,可以免除重复繁琐的回调函数嵌套, 并极大地提升错误处理的效率.koa 不在内核方法中绑定任何中间件, 它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手.开发思路和express差不多,最大的特点就是可以避免异步嵌套.koa2利用ES7的async/await特性,极大的解决

  • Node.js 学习笔记之简介、安装及配置

    简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台. Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的速度非常快,性能非常好. 谁适合阅读本教程? 如果你是一个前端程序员,你不懂的像PHP.Python或Java等动态编程语言,然后你想创建自己的服务,那么Node.js是一个非常好的选择. Node.js 是运行在服

  • WebGL学习教程之Three.js学习笔记(第一篇)

    webgl介绍 WebGL是一种3D绘图协议,它把JavaScript和OpenGL ES 2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染. WebGL技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂3D结构的网站页面,甚至可以用来设计3D网页游戏. 原生的WebGl比较复杂,主要通过对顶点着色器和片元着色器的操作,来实现渲染,但实现起来比较复杂,需要一定的数学基础,但更多的是需要学习

  • Node.js学习之TCP/IP数据通讯(实例讲解)

    1.使用net模块实现基于TCP的数据通讯 提供了一个net模块,专用于实现TCP服务器与TCP客户端之间的通信 1.1创建TCP服务器 在Node.js利用net模块创建TCP服务器 var server = net.createServer([options],[connectionListener]) //options:false当TCP服务器接收到客户端发送的一个FIN包时将会回发一个FIN包 true当TCP服务器接收到客户端发送的一个FIN包时将不会回发FIN包,这使得TCP服务器

  • vue.js学习笔记之绑定style样式和class列表

    数据绑定一个常见需求是操作元素的 class 列表和它的内联样式.因为它们都是 attribute,我们可以用 v-bind 处理它们:只需要计算出表达式最终的字符串.不过,字符串拼接麻烦又易错.因此,在 v-bind 用于 class 和 style 时,Vue.js 专门增强了它.表达式的结果类型除了字符串之外,还可以是对象或数组. 一.绑定Class属性. 绑定数据用v-bind:命令,简写成: 语法:<div v-bind:class="{ active: isActive }&q

  • node.js学习之交互式解释器REPL详解

    简介 repl是Node.js提供的一个Read-Eval-Print-Loop (REPL,读取-执行-输出-循环)实现,它即可以做为一个独立的程序使用,又可以包含在其它应用中使用.REPL是一个互式命令行解析器,它提供了一个交互式的编程环境,它可以实时的验证你所编写的代码,非常适合于验证Node.js和JavaScript的相关API. Node 自带了交互式解释器,可以执行以下任务: 读取 - 读取用户输入,解析输入了Javascript 数据结构并存储在内存中. 执行 - 执行输入的数据

  • vue.js学习笔记之v-bind和v-on解析

    v-bind 指令用于响应地更新 HTML 特性 形式如:v-bind:href    缩写为    :href; v-on 指令用于监听DOM事件 形式如:v-on:click  缩写为 @click; <body> <div id="test"> <img v-bind:src="src"> <a v-bind:href="url" rel="external nofollow"

  • WebGL three.js学习笔记之阴影与实现物体的动画效果

    实现物体的旋转.跳动以及场景阴影的开启与优化 本程序将创建一个场景,并实现物体的动画效果 运行的结果如图: 运行结果 完整代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Three.js</title> <script src="../../../Import/three.js

  • JS学习笔记之数组去重实现方法小结

    本文实例讲述了JS学习笔记之数组去重实现方法.分享给大家供大家参考,具体如下: 操作的数组 let arr=[0,1,23,'1',4,2,8,5,5,6,9,'asdasd','5'] 1. 利用ES6 的set 来进行数组去重 console.time("set") let type1=new Set(arr) console.log(type1) type1=[...type1] console.log(type1) console.timeEnd("set"

  • JS学习笔记之闭包小案例分析

    本文实例讲述了JS学习笔记之闭包小案例.分享给大家供大家参考,具体如下: 直接上代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Document</title> </head> <style type="text/css"> *{ list-style

随机推荐