node.js express框架简介与实现


Posted in Javascript onJuly 23, 2019

前言

之前学习过node.js接触过express框架,最近为了编写一个mock server正好用到了express。下面正好就跟大家介绍一下关于express。

今天的内容主要围绕这么几个方面?

  • express框架初步介绍
  • express框架中的app.use和app.get/app.post
  • mock server 介绍
  • mock server的实现思路

一、express框架初步介绍

关于express框架的介绍,这里我引用菜鸟教程的简介:

Express是一个简洁而灵活的node.js web框架,提供了一系列强大特性帮助你创建各种web应用,和丰富的HTTP工具。使用Express可以快速地搭建一个完整功能的网站。

1.express框架的特性

  • (1)可以设置中间件来响应HTTP请求;
  • (2)定义了路由表用于执行不同大的HTTP请求动作;
  • (3)可以通过向模板传递参数来动态渲染HTML页面;

2.安装express

npm install express --save或cnpm install express --save

以下几个重要需要与express框架一起安装:

  • body-parser -node.js中间件,用于处理JSON,Raw,Text和URL编码的数据;
  • cookie-parser -这就是一个解析Cookie的工具。通过req.cookies可以取到传过来的cookie,并将它们转为对象;
  • multer - node.js中间件,用于处理enctype=“multipart/form-data”(设置表单mime编码)的表单数据;

安装命令如下所示:

npm install body-parser --save
npm install cookie-parser --save
npm install multer --save

3.express的入门程序

node_learning.js代码如下:

var express = require('express');
var app = express();

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

var server = app.listen(2019, function () {

 var host = server.address().address
 var port = server.address().port

 console.log("应用实例,访问地址为 http://127.0.0.1:2019", host, port)

})

二、express框架中的app.use和app.get/app.post

app.use和app.get/app.post其实区别如(引用一位朋友说的):

感兴趣的可以参考这个链接:作者做了试验测试过的

(1)app.use(path,callback)中的callback既可以是router对象又可以是函数

(2)app.get(path,callback)中的callback只能是函数

app.use和app.get/app.post实现几乎大同小异,代码示例如下:

var express = require('express');
var app = express();
function testUser(req, res, next){
 // req 参数可以接受一些请求的参数(req.query/req.body) 和 请求头信息
 // res 用于响应信息
 // 调用next()方法则进入下一个中间件
 res.send("测试用户");
}

function testLogin(req,res,next){
 res.send("测试登录");
}

var server = app.listen(2019, function () {
 var host = server.address().address
 var port = server.address().port
 console.log("应用实例,访问地址为 http://127.0.0.1:2019")
})

//路径匹配

app.use('/user',testUser);
app.get('/login',testLogin);

关于node.js的express框架就介绍这么多,最近本人因实现某个插件的功能而需要用到的,这与下面说的mock server有比较大的关系。

三、mock server 介绍

mock server 翻译过来的意思是模拟服务。

说到这我相信大家就很容易理解了。至于为什么要模拟服务?

比方说现今的业务系统很少有孤立存在的,它们或多或少使用其他公司提供的服务,这给我们联调和测试造成了比较大的麻烦,对于这种情况,常见的解决方案就是搭建一个mock server,模拟那些服务器,提供数据进行联调和测试

node.js express框架简介与实现

四、mock server的实现思路

现在google或者being搜索mock server 实现思路肯定有很多,这里我就不再赘述。

这里我以我自己最近的vscode插件开发来说。

我最近的工作是针对Settings-Sync作二次开发

关于settings-sync插件,感兴趣的可以参考我的博客园Settings-Sync源码阅读

如何实现一个mock server 替换github api地址并确保效果一致?

针对目前这个需求,我的实现思路如下:

  • 第一,针对如何实现一个mock server ,可以复用已有,如mock-github-api(其本身是使用node.js的express框架);
  • 第二,如何编写,可以按照express框架编写网络请求的方法,如app.get或app.use等;
  • 第三,为了保持与githu api一致,我需要引入github rest api,如@octokit/rest;

参考api地址

示例一:
  octokit.repos.listForOrg({
  org: 'octokit',
  type: 'public'
 }).then(({ data, status, headers }) => {
  // handle data
  //console.log("status:"+JSON.stringify(headers));
  //console.log(status);
  console.log(data);
 })
 返回的octokit相关的api信息(信息太多了,就先简略)
示例二:
 const clientWithAuth = new Octokit({
 auth: 'token secret123'
 })
 console.log(clientWithAuth)//查看详细信息
 console.log(JSON.stringify(clientWithAuth))//输出简要信息如下
 所示:
 返回的信息:
 {"log":{},"activity":{},"apps":{},"checks":{},"codesOfConduct":{},"emojis":{},
 "gists":{},"git":{},"gitignore":{},"interactions":{},"issues":{},"licenses":{},
 "markdown":{},"meta":{},"migrations":{},"oauthAuthorizations":{},"orgs":{},
 "projects":{},"pulls":{},"rateLimit":{},"reactions":{},"repos":{},"search":{},
 "teams":{},"users":{},"gitdata":{},"authorization":{},"pullRequests":{}
 }

第四,根据router.json(node_modules\@octokit\rest\plugins\rest-api-endpoints\routes.json)也就是octokit里面定义github rest api的地方(该文件定义了所需的所有的请求信息),我可以仿照其编写对应的网络请求(美其名依样画葫芦);

如果要用一句简单直接的话来概述,模仿github rest api编写一个mock server来替换github,只要接口定义保持一致就可以。
但是目前存在一个问题,我在此停滞不前。正在想办法解决这个问题。

这个问题是,我参考其对应的rest api文档写代码,但是其返回的信息却并没有我想要的,返回是一大堆没有用处的function之类的,而不是具体的信息。

但是以5why原则来看待这个问题:

为什么github api会返回一大堆function?

这些function有什么用?github api不会无缘无故返回没有用的东西

还有就是为什么console.log(clientWithAuth)返回详细信息,console.log(JSON.stringify(clientWithAuth))返回的却是简要信息呢?难道是因为非JSON数据吗?两者返回的都是JSON数据

我查找JSON.stringify()认为应该是这个原因:

JSON.stringify() 方法是将一个JavaScript值(对象或者数组)转换为一个 JSON字符串,如果指定了replacer是一个函数,则可以替换值,或者如果指定了replacer是一个数组,可选的仅包括指定的属性(参考地址)

另外前面虽说不讲mock server的实现思路,但是还是要推荐一下一个开源实现框架 moco。

github仓库地址为:https://github.com/dreamhead/moco

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

Javascript 相关文章推荐
jquery.artwl.thickbox.js  一个非常简单好用的jQuery弹出层插件
Mar 01 Javascript
Extjs中使用extend(js继承) 的代码
Mar 15 Javascript
浅谈轻量级js模板引擎simplite
Feb 13 Javascript
C++中的string类的用法小结
Aug 07 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
Aug 01 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
Mar 04 Javascript
node.js 中间件express-session使用详解
May 20 Javascript
详解微信小程序设置底部导航栏目方法
Jun 29 Javascript
vue脚手架搭建项目的兼容性配置详解
Jul 17 Javascript
微信小程序内拖动图片实现移动、放大、旋转的方法
Sep 04 Javascript
laydate时间日历插件使用方法详解
Nov 14 Javascript
Javascript设计模式之原型模式详细
Oct 05 Javascript
js微信分享接口调用详解
Jul 23 #Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
Jul 23 #Javascript
vue 地区选择器v-distpicker的常用功能
Jul 23 #Javascript
微信小程序 网络通信实现详解
Jul 23 #Javascript
微信小程序 确认框的实现(附代码)
Jul 23 #Javascript
koa2 从入门到精通(小结)
Jul 23 #Javascript
详解JavaScript 浮点数运算的精度问题
Jul 23 #Javascript
You might like
风味层面去分析咖啡油脂
2021/03/03 咖啡文化
PHP array_push 数组函数
2009/12/26 PHP
PHP几个实用自定义函数小结
2016/01/25 PHP
FF IE兼容性的修改小结
2009/09/02 Javascript
js简单的表格添加行和删除行操作示例
2014/03/31 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
禁止iframe页面的所有js脚本如alert及弹出窗口等
2014/09/03 Javascript
纯js实现仿QQ邮箱弹出确认框
2015/04/29 Javascript
原生js编写autoComplete插件
2016/04/13 Javascript
Bootstrap精简教程中秋大放送
2016/09/15 Javascript
详解jQuery的Cookie插件
2016/11/23 Javascript
js生成随机颜色方法代码分享(三种)
2016/12/29 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
原JS实现banner图的常用功能
2017/06/12 Javascript
vue实现全选和反选功能
2017/08/31 Javascript
通过图带你深入了解vue的响应式原理
2019/06/21 Javascript
JavaScript实现HSL拾色器
2020/05/21 Javascript
Vue使用Proxy代理后仍无法生效的解决
2020/11/13 Javascript
Python的多态性实例分析
2015/07/07 Python
在Python中关于使用os模块遍历目录的实现方法
2019/01/03 Python
Python中如何使用if语句处理列表实例代码
2019/02/24 Python
python爬虫 2019中国好声音评论爬取过程解析
2019/08/26 Python
python中设置超时跳过,超时退出的方式
2019/12/13 Python
python中def是做什么的
2020/06/10 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
The Beach People美国:澳洲海滨奢华品牌
2018/07/05 全球购物
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
英国Lookfantastic中文网站:护肤品美妆美发购物(英国直邮)
2020/04/27 全球购物
教学实验楼管理制度
2014/02/01 职场文书
《悯农》教学反思
2014/04/28 职场文书
有关九一八事变的演讲稿
2014/09/14 职场文书
办理房产证委托书
2014/09/18 职场文书
2014年大学教师工作总结
2014/12/02 职场文书
《伯牙绝弦》教学反思
2016/02/16 职场文书
MybatisPlus代码生成器的使用方法详解
2021/06/13 Java/Android