初识express(代码片段)

mrfanl mrfanl     2023-01-31     780

关键词:

初识Express

1.简介:

    express是基于Nodejs平台的快速,开放,极简的web开发框架

 

2.安装

npm install express --save

 

3.Hello world:

const express = require(‘express‘)
const app = express()

app.get(‘/‘,(req,res)=>res.send("Hello world"))

app.listen(3000,()=>
  console.log("Example app listening on port 3000");
)

 

4.路由

     路由是指确定应用程序如何响应客户机对特定端点的请求,该端点是URI(或路径)和特定HTTP请求方法(GET、POST等)。

 当路由匹配时,该路由的方法将会响应。

app.METHOD(PATH,HANDLER);

 

  • app:一个express的实例,如上的hello world的程序段
  • Method:HTTP 的请求方法,比较常用的有get,post,你可以使用app.get();的方法处理get的请求,其他的类似
  • path:路径
  • handle:路径匹配后的方法

     需要特别说明的是:有一个特殊的路由方法:app.all(),用于在所有的http 请求方法之前加载中间件,有关中间件的详细描述会在下面给出,

    有时在请求路径中会带有参数,比如:

  Route path: /users/:userId/books/:bookId
  Request URL: http://localhost:3000/users/34/books/8989
  req.params:  "userId": "34", "bookId": "8989" 

这时所有的参数都可以在req.params这个对象中找到。
服务器端的代码是这样的:
app.get(‘/users/:userId/books/:bookId‘, function (req, res) 
    console.log(req.params);    
)

  这里重点记录一下handle(处理方法):

   (1)一个简单的处理就是:如上面hello world的程序代码块

(2)超过一个处理请求的方法时:
app.get(‘/user/:username/books/:bookId‘,function(req,res,next)
  console.log(req.params);
  next()
,function(req,res)
  res.send(req.params);
)

特别需要注意的是:a.在function中的参数中要添加上next参数作为回调函数

                                 b.如果前一个方法已经用了res.send()或其他类似函数,那么后面的方法中就不要在使用类似的方法了,不然会报错;

 

 当然你也可以把处理的方法独立出来,这样就可以是程序更加清晰;
var f1 = function(req,res,next)
  console.log(req.params);
next(); app.get(
‘/user/:username/books/:bookId‘,f1,function(req,res) res.send(req.params); )

或者也可以写成

var f1 = function(req,res,next)
  console.log(req.params);
  next();

//
var f2 = function(req,res)
  res.send(req.params);


app.get(‘/user/:username/books/:bookId‘,[f1,f2]);

 

5.res的一些方法:

    可以参考http://www.expressjs.com.cn/en/4x/api.html#res.send

 

6.app.route

   app.route()可以为路径创建可链接的路由处理程序。如下:

  

app.route(‘/book‘).get(function(req,res)
  res.send(‘你好,这是get回复‘);
  console.log(‘get回复以发送‘)

).post(function(req,res)
  res.send(‘你好,这是post回复‘);
  console.log(‘post回复已经发送‘)
)

特别说明的是:请求的匹配会从前向后依次匹配http mothed,当前一次已经完成了匹配,后面的就不会执行了。

 

7.express.Router

   可以使用express.Router()创建模块化的,可挂载的路由处理程序。一个Router实例是一个完整的中间件和路由系统。

const express = require(‘express‘)
const app = express()

const router = express.Router()

router.use(function timeLog(req,res,next)
  console.log(‘Time:‘,Date.now());
  next();
)


router.get(‘/‘,(req,res)=>res.send("Hello world"))

router.get(‘/about‘,function(req,res)
  res.json(‘name‘:‘fanl‘)
)

app.use(‘/test‘,router)
app.listen(
3000,()=> console.log("Example app listening on port 3000"); )

   这里访问/test/或者/test/about都能够在控制台上打印访问时间,并且你也可以在另外一个文件里router的代码,然后export出来,在主文件你就可以用app,use将不同文件的路由区分开来。如下:

const express = require(‘express‘);

const router = express.Router()

router.get(‘/‘,function(req,res)
  res.send(‘Hello world,birds‘);
)

module.exports = router
var router2 = require(‘./route‘)

app.use(‘/bird‘,router2)

 

8.中间件:

     中间件函数是能够访问请求对象(req),响应对象(res)和应用程序的请求-响应周期中的下一个函数的函数。这里的下一个函数指的是Express路由器中的一个函数,当我们调用这个函数时,它将在中间件函数执行之后执行。

     中间件函数有以下的一些功能:

  • 执行任何的合法代码
  • 改变req和res对象
  • 结束请求响应周期
  • 调用下一个中间件函数

注意:如果当前的中间件函数没有结束请求响应周期,那么它必须调用next()将控制权传递给下一个中间件函数。

 技术分享图片

图源:http://www.expressjs.com.cn/guide/writing-middleware.html

例子:

const express = require(‘express‘)
const app = express()

const router = express.Router()

var myLogger = function(req,res,next)
req.reqtime = Date.now();
next()//代表下一个中间件函数

app.use(myLogger);

app.get(‘/‘,function(req,res)
res.send(‘reqtime‘:req.reqtime);
)


app.listen(3000,()=>
console.log("Example app listening on port 3000");
)

        说明:上面的app.use(myLogger)也可以写成app.use("/user",myLogger)这样myLogger作为中间件只会处理"/user"的路径请求。

        另外当你在一个中间件中调用next("route"),那么路由器中间件堆栈中的其他中间件函数将会被跳过。要注意的是这种跳过接下来中间件的方法只能在app.method()方法中使用,且只能跳过同在一个app.method()方法中的中间件。这样就可以在if-else中执行对请求用户的判别,然后决定其是否要执行接下来的方法还是直接跳过。作为比较的是next("router"),它会跳过剩下的所有的中间件,而不只是同在一个app.method()中的方法。

如下:

app.get(‘/‘,function(req,res,next)
console.log(‘直接调用app.get()‘);
req.reqtime = Date.now()
next(‘route‘);//next(‘router‘)
,function(req,res,next)
console.log(‘这个方法不会被调用‘)
next();
);

app.get(‘/‘,function(req,res,next)
console.log(‘看看会不会跳过这个中间件‘);
next();
);

app.get(‘/‘,function(req,res)
res.send(‘reqtime‘:req.reqtime);
)

 

   技术分享图片

如果是next(‘router’)

技术分享图片

 

  你也可以使用一些第三方的中间件,如cooki-parser

  

npm isntall cookie-parser --save
var express = require(‘express‘)
var app = express()
var cookieParser = require(‘cookie-parser‘)

app.use(cookieParser())

 

 

 

 

 

   

  

 

   

 

   

 






























express的基本使用+nodemon(代码片段)

学习目标◆能够使用express.static()快速托管静态资源◆能够使用express路由精简项目结构◆能够使用常见的express中间件◆能够使用express创建API接口◆能够在express中启用cors跨域资源共享文章目录学习目标一、初识express1.Express的基... 查看详情

初识express丨node.js

目录一、初识Express1.1Express简介1.2Express的基本使用1.3托管静态资源1.4nodemon Node.js前篇回顾:一、初识Express1.1Express简介1.什么是Express官方给出的概念:Express是基于Node.js平台,快速、开放、极简的Web开发框架。通俗的... 查看详情

node.jsexpress框架的基本使用(代码片段)

...f1a;css重难点教学    Node.js教学从头开始学习目录 初识Express     Express简介        什么是Express        进一步理解 Express        Express能做什么     Express的基本使用        安装        创建基本的Web... 查看详情

express路由丨node.js-初识express

目录一、Express路由1.1路由的概念1.2路由的使用Node.js前篇回顾:一、Express路由1.1路由的概念1.现实生活中的路由 按键1->业务查询按键2->手机充值按键3->业务办理按键4->密码服务与停复机   在这里,路由是按键... 查看详情

使用express写接口丨node.js-初识express

目录一、 使用Express写接口1.1创建基本的服务器1.2创建API路由模块1.3编写GET接口1.4编写POST接口1.5CORS跨域资源共享1.6JSONP接口 Node.js前篇回顾:一、 使用Express写接口1.1创建基本的服务器1.2创建API路由模块1.3编写GET接口1.4编写... 查看详情

初识存储过程(代码)(代码片段)

--1createprocedureGetStudentsInfoasselect*fromstudentgoexecGetStudentsInfoalterprocedureGetStudentsInfoasselect*fromstudentwherestuSex=‘男‘execGetStudentsInfo--2/*publicDataTableGetStudentsInfoByGrade( 查看详情

初识爬虫(代码片段)

这两个用法其实我也还是没有怎么搞懂,先记录下吧HttpContentcontent=newStringContent(JsonConvert.SerializeObject(o),Encoding.UTF8,"application/json");varmyhttpclient=_myhttpclientfactory.CreateClient();varmessage=Task.Run(()=& 查看详情

函数的初识(代码片段)

函数的初识写一个获取字符串总个数的代码,不能用len:s1='fjkdsfjdssudafurpojurojregreuptotuproq[t'#python没有lencount=0foriins1:count+=1print(count)写一个获取列表总个数的代码:l1=[1,2,3,4,5,6]count=0foriinl1:count+=1#print(count)这样的写代 查看详情

装饰器的初识(代码片段)

装饰器的初识版本一:大壮写一些代码测试一下index函数的执行效率。importtime#defindex():#‘‘‘有很多代码.....‘‘‘#time.sleep(2)#模拟的网络延迟或者代码效率#print(‘欢迎登录博客园首页‘)##defdariy():#‘‘‘有很多代码.....‘‘‘... 查看详情

初识递归(代码片段)

...存角度出发做得限制#能看懂递归#能知道递归的应用场景#初识递归——#算法——二分查找算法#三级菜单——递归实现#whileTrue:#print(‘从前有座山‘)#defstory():#print(‘从前有座山‘)#story()#print(111)##story()#RecursionEr 查看详情

springmvc注解版本--初识--12(代码片段)

SpringMVC注解版本--初识--12初识基于注解的Controller基于注解的Controller原型分析自定义用于基于注解的Controller的HandlerMapping官方提供用于处理注解的HandlerMapping自定义用于基于注解的Controller的HandlerAdaptor初识基于注解的Controller在Spri... 查看详情

activemq初识-2(代码片段)

activeMq简单实例:packagecom.gordon;importorg.apache.activemq.ActiveMQConnectionFactory;importjavax.jms.*;/***生产者*Createdbygordonon2018/9/8.*/publicclassSenderpublicstaticfinalStringuserName="admin";publi 查看详情

9-函数初识(代码片段)

三元运算  z=aifa>belseb 函数的初识:   def函数名():   函数体1ll=‘你好,China‘2defmy_lenth():#用来定义函数34#函数体5count=06foriinll:7count+=18print(count)91011my_lenth()#调用函数  函数就是封装一个功能   函数是以功能为导... 查看详情

gitbook初识(代码片段)

文章目录gitbook初识1.环境要求1.1`node`安装参考1.2版本检查2.安装`gitbook-cli`脚手架工具3.基本命令使用3.1初始化3.1.1目录结构3.2启动3.3构建3.4示例4.预览gitbook初识使用gitbook开发电子书,本文主要采用gitbook-cli方式进... 查看详情

gitbook初识(代码片段)

文章目录gitbook初识1.环境要求1.1`node`安装参考1.2版本检查2.安装`gitbook-cli`脚手架工具3.基本命令使用3.1初始化3.1.1目录结构3.2启动3.3构建3.4示例4.预览gitbook初识使用gitbook开发电子书,本文主要采用gitbook-cli方式进... 查看详情

初识go的语法(代码片段)

一、HelloWord初识先来解释一下上次的代码packagemain//声明main包,表明当前是一个可执行程序import( "fmt")//导入内置fmt包funcmain()//main函数,是程序执行的入口 fmt.Println("HelloWorld!")//在终端打印HelloWorld!1、packagemainpa... 查看详情

numpy初识(代码片段)

文章目录numpy初识一、numpy是什么?二、numpy数组2.1数组使用2.2创建数组1.使用empty创建空数组2.使用arange函数创建3.使用zeros函数生成数组4.ones函数生成数组5.diag函数生成对角矩阵6.N维数组2.3访问数组元素三、了解矩阵3.1广播惊... 查看详情

初识函数(代码片段)

1.什么是函数  函数就是具备某一功能的工具2.为什么要用函数  1增加程序的可读性,让程序变得清晰  2减少代码冗余  3增加可扩展性3如何用函数  函数的使用必须遵循的原则:先定义,后调用  语法:    d... 查看详情