首页 web前端 js教程 在node.js中有关路由,中间件的详细介绍说明

在node.js中有关路由,中间件的详细介绍说明

Jun 15, 2018 pm 02:41 PM
nodejs 中间件

本文给大家汇总介绍了node.js中的路由,中间件,ge请求和post请求的参数的使用方法,非常的详细,有需要的小伙伴可以参考下

一、路由

   1、什么是路由

      服务器需要根据不同的URL或请求来执行不一样的操作,我们可以通过路由来实现这个步骤

   2、实现路由的方法

    2.1、get请求访问网址时,做什么事

 app.get("网址",function(req,res){
  
 });
登录后复制

    2.2、post请求访问网址时,做什么事       

 app.post("网址",function(req,res){
  
 });
登录后复制

   2.3、任何请求访问这个网址  

 app.all("网址",function(){
  
 });
登录后复制

  注意:1、'这里的网址不分大小写,例如

 app.get("/AAb",function(req,res){        //我们访问  /aab也是可以的
  res.send("你好");
 });
登录后复制

     2、你路由到/a , 实际/a?id=2&sex=nan 也能被处理。   

  3、路由中正则表达式的使用

    3.1、正则表达式中,未知部分用圆括号分组,然后可以用req.params[0]、[1]得到。req.params类数组对象。 

 app.get(/^\/student\/([\d]{10})$/,function(req,res){
  res.send("学生信息,学号" + req.params[0]);
 });
登录后复制

    3.2、冒号写法(推荐)

var express=require('express');
var app=express();
//冒号1
app.get("/student/:id",function (req,res) {
 var id=req.params["id"];                    //得到id的值
 var reg=/^[\d]{6}$/;
 if(reg.test(id)){
  res.send(id);
 }else {
  res.send("请检查格式");
 }

});
//冒号2
app.get("/:username/:oid",function(req,res){
 var username = req.params["username"];            //得到username的值
 var oid = req.params["oid"];                  //得到//oid的值
 res.write(username);
 res.end(oid);
});
app.listen(3000);
登录后复制

运行结果:

冒号1:

冒号2:

二、中间件

  1、什么是中间件

    应用于应用之间 充当连接服务的,例如上面的get、post请求就是中间件

  2、express中所有的路由(中间件)的顺序(很重要)

     2.1、next()方法     

var express=require("express");
var app=express();
app.get("/",function (req,res,next) {
 console.log(1);
 next();    //如果没有next参数,就只会conlose出来1,而不会是1,2
});
app.get("/",function (req,res) {
 console.log(2);
});
 app.listen(3000);
登录后复制

    2.2、顺序冲突:下面这两个路由,看起来没有关系,但其实是有冲突的,因为admin可以当做用户名 login可以当做id

var express=require("express");
var app=express();
app.get("/:username/:id",function(req,res){
  console.log("1");
  res.send("用户信息" + req.params.username);
});

app.get("/admin/login",function(req,res){
  console.log("2");
  res.send("管理员登录");
});
app.listen(3000)
登录后复制

  运行结果:当我们访问172.0.0.1:3000/admin/login时只会输出 用户信息admin 而不会是管理员登录

  2.3、解决顺序冲突

    2.3.1、具体的往上写,抽象的往下写    

var express=require("express");
var app=express();
//具体的
app.get("/admin/login",function(req,res){
  console.log("2");
  res.send("管理员登录");
});
//抽象的
app.get("/:username/:id",function(req,res){
  console.log("1");
  res.send("用户信息" + req.params.username);
});
app.listen(3000)
登录后复制

运行结果:当我们访问172.0.0.1:3000/admin/login时输出 管理员登录 而不会是用户信息admin

    2.3.2、检索数据库

var express=require("express");
var app=express();
app.get("/:username/:id",function (req,res,next) {
  var username=req.params.username;
  //检索数据库,如果username 不存在,那么next()
 if(检索数据库){
  console.log("1");
  res.send("用户信息")
 }else{
  next();
 }
});
app.get("/admin/login",function (req,res) {
 console.log("2");
 res.send("管理员登录");
});
app.listen(3000)
登录后复制

  3、app.use()中间件:与get、post不同的是,他的网址不是精确匹配的。而是能够有小文件夹拓展的。

    3.1、get.use()的模糊匹配

var express=require("express");
var app=express();
//匹配所有网址
//法一
//当你不写路径的时候,实际上就相当于“/”,就是所有网址
// app.use(function (req,res,next) {
//  console.log(new Date());
//  next();     //执行下面的
// });
//法二
app.use("/",function (req,res,next) {
 console.log(new Date());
 next();     //执行下面的
});
//匹配/admin所有地址,例如/admin/ss/aa这个都行
app.use("/admin",function (req,res) {
 res.write(req.originalUrl+"\n"); // /admin/ss/aa
 res.write(req.path+"\n");   // /ss/aa
 res.write(req.baseUrl+"\n");  // /admin
 res.end("你好");
});
app.listen(3000);
登录后复制

  3.2、get.use()读取文件

var express=require("express");
var fs=require("fs");
var app=express();

//当你不写路径的时候,实际上就相当于“/”,就是所有网址
app.use(haha);  //haha是一个函数
app.listen(3000);
// function haha(req,res) {
//  res.send("哈哈");
// }

app.use('/admin',function (req,res) {
 res.send('管理员登录');
})
//根据当前的网址,读取punlic文件夹的文件
//如果有这个文件,就渲染这个文件
//如果没有这个文件,那么next()
function haha(req,res,next) {
 var filePath=req.originalUrl;
 //根据当前的网址,读取public文件夹的文件
 //如果有这个文件,那么渲染这个文件
 //如果没哟偶这个文件,那么next();
 fs.readFile("./public/"+filePath,function (err,data) {
  if(err){
   //文件不存在
   next(); //一定要写,不然处于挂起状态
   return;
  }
  res.send(data.toString());
 })
}
登录后复制

  4、render和send

     4.1、res.send()方法快速测试页

var express=require("express");
var app=express();
//静态服务
app.use('/jingtai',express.static("./public"));

//新的路由
app.get('/images',function (req,res) {
 res.send("哈哈")
});
//会自动识别err参数,如果有,那么就这个函数能捕获err
app.use(function (req,res) {
 res.status(404).send("没有这个页面!");
})
app.listen(3000);
登录后复制

    4.2、res.render()渲染内容,将会根据views中的模板文件进行渲染。如果不想使用views文件夹,想自己设置文件夹名字,那么app.set("views","aaaa");

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

// //设置ejs文件夹名字  //在day3文件夹下新建文件夹a,然后在里面放ejs文件
// app.set("views","a")
app.set("view engine","ejs");
app.get("/",function(req,res) {
 res.render("haha",{news:[]});

});

app.get("/check",function (req,res) {
 res.send({
  "user":"ok"
 })
})
app.listen(3000);
登录后复制

  5、req.query:当输入http://127.0.0.1:3000/?id=0&ag=9

var express=require("express");
var app=express();
app.get("/",function (req,res) {
 console.log(req.query);
 res.send();
});
app.listen(3000);
登录后复制

运行结果:

三、get请求参数post请求参数:

GET请求的参数:在URL中,在Express中,不需要使用url模块了。可以直接使用req.query对象。

POST请求参数:在express中不能直接获得,必须使用body-parser模块。使用后,将可以用req.body得到参数。但是如果表单中含有文件上传,那么还是需要使用formidable模块。

//form.ejs

<!doctype html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title></title>
</head>
<body>
<form action="#" method="post">
 <input type="text" name="name"/>
 <input type="text" name="age"/>

 <input type="submit"/>
</form>
</body>
</html>
登录后复制
//.jsvar express=require("express");
var bodyParser=require(&#39;body-parser&#39;);
var app=express();
app.set(&#39;view engine&#39;,&#39;ejs&#39;)
app.get(&#39;/&#39;,function (req,res) {
 res.render("form");
});
//bodyParser API
app.use(bodyParser.urlencoded({extended:false}));
app.post(&#39;/&#39;,function (req,res) {
 console.log(req.body);
});
app.listen(3000);
登录后复制

 运行结果:

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

在Vue中有关使用ajax方法有哪些?

在vue.js中如何实现数据分发slot

使用Angular2如何整合插件(详细教程)

javascript数组如何拍平?

以上是在node.js中有关路由,中间件的详细介绍说明的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

nodejs是后端框架吗 nodejs是后端框架吗 Apr 21, 2024 am 05:09 AM

Node.js 可作为后端框架使用,因为它提供高性能、可扩展性、跨平台支持、丰富的生态系统和易于开发等功能。

nodejs怎么连接mysql数据库 nodejs怎么连接mysql数据库 Apr 21, 2024 am 06:13 AM

要连接 MySQL 数据库,需要遵循以下步骤:安装 mysql2 驱动程序。使用 mysql2.createConnection() 创建连接对象,其中包含主机地址、端口、用户名、密码和数据库名称。使用 connection.query() 执行查询。最后使用 connection.end() 结束连接。

nodejs中的全局变量有哪些 nodejs中的全局变量有哪些 Apr 21, 2024 am 04:54 AM

Node.js 中存在以下全局变量:全局对象:global核心模块:process、console、require运行时环境变量:__dirname、__filename、__line、__column常量:undefined、null、NaN、Infinity、-Infinity

nodejs安装目录里的npm与npm.cmd文件有什么区别 nodejs安装目录里的npm与npm.cmd文件有什么区别 Apr 21, 2024 am 05:18 AM

Node.js 安装目录中有两个与 npm 相关的文件:npm 和 npm.cmd,区别如下:扩展名不同:npm 是可执行文件,npm.cmd 是命令窗口快捷方式。Windows 用户:npm.cmd 可以在命令提示符下使用,npm 只能从命令行运行。兼容性:npm.cmd 特定于 Windows 系统,npm 跨平台可用。使用建议:Windows 用户使用 npm.cmd,其他操作系统使用 npm。

nodejs和java的差别大吗 nodejs和java的差别大吗 Apr 21, 2024 am 06:12 AM

Node.js 和 Java 的主要差异在于设计和特性:事件驱动与线程驱动:Node.js 基于事件驱动,Java 基于线程驱动。单线程与多线程:Node.js 使用单线程事件循环,Java 使用多线程架构。运行时环境:Node.js 在 V8 JavaScript 引擎上运行,而 Java 在 JVM 上运行。语法:Node.js 使用 JavaScript 语法,而 Java 使用 Java 语法。用途:Node.js 适用于 I/O 密集型任务,而 Java 适用于大型企业应用程序。

nodejs是后端开发语言吗 nodejs是后端开发语言吗 Apr 21, 2024 am 05:09 AM

是的,Node.js 是一种后端开发语言。它用于后端开发,包括处理服务器端业务逻辑、管理数据库连接和提供 API。

nodejs和java选哪个 nodejs和java选哪个 Apr 21, 2024 am 04:40 AM

Node.js 和 Java 在 Web 开发中各有优劣,具体选择取决于项目要求。Node.js 擅长实时应用程序、快速开发和微服务架构,而 Java 则在企业级支持、性能和安全性方面占优。

nodejs可以写前端吗 nodejs可以写前端吗 Apr 21, 2024 am 05:00 AM

是的,Node.js可用于前端开发,主要优势包括高性能、丰富的生态系统和跨平台兼容性。需要考虑的注意事项有学习曲线、工具支持和社区规模较小。

See all articles