学习Node须知——中间件框架Connect

作者 : 开心源码 本文共1546个字,预计阅读时间需要4分钟 发布时间: 2022-05-12 共239人阅读

主要通过学习《Node.js实战(第2版)》总结,推荐阅读

理解 Connect

Connect 是一个 node 中间件框架。Express 就是基于 Connect 开发的。

假如把一个 HTTP 解决过程比作是污水解决,中间件就像是一层层的过滤网,过滤网有各自不同的作用。

安装

$ npm install connect

Demo

const app = require('connect')();// 传给 app.use 的函数就是一个中间件app.use((req, res, next) => {  res.end('Hello, world!');});app.listen(3000);

Connect 中间件

Connect 中间件就是 JavaScript 函数。函数一般有三个参数:

  • req(请求对象)
  • res(响应对象)
  • next(回调函数)

一个中间件完成自己的工作后,假如要执行后续的中间件,需要调用 next 回调函数。

作用

借助中间件 API,可以把少量小的功能组合到一起,实现复杂的解决逻辑。

如何组合中间件?

Connect 中的 use 方法就是用来组合中间件的。

const connect = require('connect');// 输出 HTTP 请求的方法和 URL 并调用 next() 执行后续中间件function logger(req, res, next) {  console.log('%s %s', req.method, req.url);  next();}// 响应 HTTP 的请求function hello(req, res, next) {  res.setHeader('Content-Type', 'text/plain');  res.end('hello world');}// 按顺序组合中间件connect()  .use(logger)  .use(hello)  .listen(3000);

注意组合中间件的顺序很重要,假如某个中间件不调用 next() ,那么在它后面的中间件就不会被调用。

如何创立可配置的中间件?

普通的中间件写法没办法通过传参数来实现扩展性或者通用性,相当于写死了,自由度不高。

可配置的中间件写法一般这样:用一个函数返回另一个函数(闭包)。

// 基本结构function setup(options) {  // 这里做中间件的初始化逻辑  ...  return function(req, res, next) {    // 中间件逻辑    ...  }}// 使用方法。通过 options 可以传入少量配置参数const options = { ... };app.use(setup(options));

比方一个可配置的中间件 logger.js

function setup(format) {  const regexp = /:(\w+)/g;  return function createLogger(req, res, next) {    // 根据传入的参数提取响应的信息    const str = format.replace(regexp, (match, property) => {      return req[property];    });    console.log(str);    next();  }}module.exports = setup;

中间件如何进行错误解决?

Connect 有一种用来解决错误的中间件变体,比常规中间件多了一个错误对象参数。

必需有四个参数:errreqresnext

错误解决中间件有两种工作机制

  • 用 Connect 的默认错误解决器(自动解决)
  • 自行解决

当 Connect 遇到错误时,回调过常规中间件,只去调用错误解决中间件。比方:

connect()    .use(mw1) // 出错    .use(mw2) // 跳过    .use(mw3) // 跳过    .use(errorHandler) // 执行 

参考

  1. 《Nodejs基础中间件Connect》
  2. 《Node.js实战(第2版)》

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 学习Node须知——中间件框架Connect

发表回复