上篇文章分析了模拟登陆过程,这篇则是介绍所使用到的模块(Module)

使用到的 Node.js 模块(Module)

  • Express
  • SuperAgent
  • Cheerio
  • Async

Express

Express ——基于 Node.js 平台,快速、开放、极简的 Web 开发框架。

Node.js 最热门的 Web 开发框架,相信大家对 Express 都很熟悉。

Hello World

新建 app.js,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
const express = require('express');
const app = express();

app.get('/', function(req, res) {
res.send('Hello World!');
});

let server = app.listen(3000, function() {
let host = server.address().address;
let port = server.address().port;

console.log('Example app listening at http://%s:%s', host, port);
});

与同个目录下命令行执行,即可启动服务,同时访问:http://localhost:3000

1
$ node app.js

具体用法请点传送门:中文快速入门指南

SuperAgent

我们都知道,Node.js 发送 HTTP 请求最常用到的模块就是 Request,但是我使用这个模块的时候会发现请求会跟随重定向一直跳转,无法拦截、分开发送请求,所以这次我们使用另一个模块—— SuperAgent

SuperAgent is a small progressive client-side HTTP request library, and Node.js module with the same API, sporting many high-level HTTP client features.
——SuperAgent Docs From Github

SuperAgent 是一个轻量级渐进式客户端 HTTP 请求库,它依赖 Node.js 原生 API,集合了许多高级别的 HTTP 客户端功能。

以上为个人翻译,如有不正确请指正,大概意思应该没有错。

SpuerAgent 模块在进行 HTTP 请求遇到重定向时可以拦截,并分步去完成接下来的请求,此外它还可在执行请求时设置请求头信息,设置 Cookies 等。

Simple Example :

1
2
3
4
5
6
7
8
request
.get('http://tm.bnuz.edu.cn/')
.then(function(res) {
// res.body, res.headers, res.status
})
.catch(function(err) {
// err.message, err.response
});

传送门:官方文档

Cheerio

Cheerio : Fast, flexible & lean implementation of core jQuery designed specifically for the server.

专门为服务端设计的核心 jQuery 的快速、灵活和完整实现模块。

同样,按照惯例,来个Example:

1
2
3
4
5
6
7
8
const cheerio = require('cheerio');
const $ = cheerio.load('<h2 class="title">Hello world</h2>');

$('h2.title').text('Hello there!');
$('h2').addClass('welcome');

$.html();
//=> <h2 class="title welcome">Hello there!</h2>

传送门:官方文档

Async

Async is a utility module which provides straight-forward, powerful functions for working with asynchronous JavaScript. Although originally designed for use with Node.js, it can also be used directly in the browser.

Async 为异步 JavaScript 提供了直接且强大的功能,虽然最初设计用于 Node.js,但它也可直接运行与浏览器。

Quick Example :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
async.map(['file1','file2','file3'], fs.stat, function(err, results)
{
// results is now an array of stats for each file
})

async.filter(['file1','file2','file3'], function(filePath, callback)
{
fs.access(filePath, function(err) {
callback(null, !err)
});
}, function(err, results) {
// results now equals an array of the existing files
})

async.parallel([
function(callback) { ... },
function(callback) { ... }
], function(err, results) {
// optional callback
})

async.series([
function(callback) { ... },
function(callback) { ... }
])

传送门:官方文档

结语

使用到的模块大概介绍的差不多了,上一篇也分析了模拟登陆的详细过程了,下一篇就是通过 Node.js 模拟登陆 TMS 教务系统的具体实现啦!