Express路由
1、 路由器的配置分为两个,一个是需要做页面的渲染,一个是需要直接进行对数据进行输出,对于路由器的配置需要对路由器在公共的app.js进行注册与注入才能生效,否则是不能生效的。配置时根据不同的应用场景进行配置
//数据注入点的app.js
//定义路由地址
let indexRouter = require('./routes/vip-course');
//注入路由进行使用
app.use('/vip-course', indexRouter); /*
路由配置页面(对于'/'的配置,设置默认页)
类似于:http://localhost:3000/vip-course
*/
router.get('/',(req,res,next)=>{
/*
send()方法与render() 不能同时存在,如果同时存在则会按照前后顺序进行对应的覆盖
*/
//默认的页面直接展示
res.send("1111"); /*
页面的渲染,ctx为一个对象参数,ctx={};
{
title:"标题",//
json:[],//json数组
jdata={}//对象
...
}
"index"代表是设置的默认页面
*/
res.render("index",ctx);
})
2、路由的传参
在路由进行配置需要进行页面的渲染时,需要用到的传参主要有三种:
1 //路由进行Url的传参 http://localhost:3000/vip-course/add?a=b
2 router.get('/:course', (req, res, next)=> {
3 //获取到访问链接地址中的 add 参数
4 let add=req.params.course;
5 //获取到的是跟在链接地址后面的参数a的值,根据传入不同的名称进行不同的取数即可
6 let a=req.query.a
7 res.render('vip-course/' + req.params.course);
8 });
9
10 //路由进行post请求进行传参时,直接通过body进行传参,一般用于submit的表单提交,或ajax的数据提交
11 router.post('/:course', (req, res, next)=> {
12 let data=req.body;//获取提交的body参数数据
13 res.render('vip-course/' + req.params.course);
14 });
3、错误处理
为了避免一些黄页的出现,或者直接将一些错误抛出来造成了我们代码的安全性不高,所以我们可以进行一些错误的自定义化处理
/*
在访问页面时,发现该页面不存在,或者是地址输入错误时
http://localhost:3000/data
*/
router.get('/:datas', function(req, res, next) {
//接收到的参数是否为index
if (req.params.datas=="index"){
res.render('index');
}else{
//输入的页面不是index时,或者不存在的一个页面时,需要直接进行自定义错误的抛出
next(new Error("找不到页面了"));
}
}); /*
自定义错误信息
*/
//引入一个http-errors的包
var createError = require('http-errors');
router.get('/:datas', function(req, res, next) {
if (req.params.datas=="index"){
res.render('index');
}else{
//创建一个错误代码为404,错误信息为 找不到页面了 的错误对象,供页面去显示
next(createError(404, '找不到页面了'));//状态码404
}
});
在发现一些错误无法进行满足时,或者对于一些根本无需去理会的错误,应该让他自己去适应和查找对应的界面时,或者我们对于所有的错误都统一去一个错误界面时,我们需要进行页面的重定向
router.get('/:datas', function(req, res, next) {
if (req.params.datas=="index"){
res.render('index');
}else{
//直接进行页面的重定向跳转
res.redirect('Error')
}
});
Express路由的更多相关文章
- express路由和中间件
路由 简单来说,express路由就是用来处理一些请求,响应一些url地址. var express = require('express'); var app = express(); app.ge ...
- express路由探析(续)
上一篇分析了express的路由机制,这次主要补充一些没有说到的东西. 之前说到,Router是中间件容器,Route是路由中间件,他们各自维护一个stack数组,里面存放layer,layer是封装 ...
- Node.js Express 路由文件分类
前言 基于上一篇Web Api Controller分类,在MVC中我们通常要按自己的业务来划分Controller层, 好处多多,那么Express框架作为Node.js的一款MVC框架,那么自然也 ...
- nodejs开发 express路由与中间件
路由 通常HTTP URL的格式是这样的: http://host[:port][path] http表示协议. host表示主机. port为端口,可选字段,不提供时默认为80. path指定请求资 ...
- Express 路由
路由 路由是指如何定义应用的端点(URIs)以及如何响应客户端的请求. 路由是由一个 URI.HTTP 请求(GET.POST等)和若干个句柄组成,它的结构如下: app.METHOD(path, [ ...
- (三)、Express 路由、静态文件、
一.路由 路由(Routing)是由一个 URI(或者叫路径)和一个特定的 HTTP 方法(GET.POST 等)组成的,涉及到应用如何响应客户端对某个网站节点的访问. 每一个路由都可以有一个或者多个 ...
- Node.js express路由简单分析
这2天看了一点node+express的路由源码有了一点眉目,总结一下 对于app.get, 首先给出一张类图: 图1 注意每个路由有一个stack,这个stack中存放了Layer. 路由系统内有三 ...
- node环境下express路由,
1.基本路由概念 路由是指确定应用程序如何响应对特定端点的客户端请求,该请求是URI(或路径)和特定HTTP请求方法(GET,POST等). 每个路由都可以有一个或多个处理函数,这些函数在路由匹配时执 ...
- angular2路由与express路由冲突的问题
angular2的路由定义了一个/a,如果走angular的路由没问题,如果直接访问/a就会出现cannot GET /a的错误,原因就是express的路由问题. 所以路由走angular2,那ex ...
- [转]express 路由控制--next
next() express的路由控制有个next()功能,在定义了多个路由的时候,对匹配的url会按顺序执行, 例如,有这样两个路由,第一个路由会对满足“/”的地址,在req中添加一个user的属性 ...
随机推荐
- Oracle编码
三.解决数据库乱码原理特辑内容 3.1 前言 在解决数据库乱码问题中,涉及到三个方面的字符集:1.oracel server端的字符集:2.oracle client端的字符集:3.dmp文件的字符集 ...
- 42.输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S, 如果有多对数字的和等于S,输出两个数的乘积最小的。
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S, 如果有多对数字的和等于S,输出两个数的乘积最小的. 这道题有很多烟雾弹: 首先如果有多对,最前面的两个数就是乘积最小的, ...
- 从CSS到houdini
0. 前言 平时写CSS,感觉有很多多余的代码或者不好实现的方法,于是有了预处理器的解决方案,主旨是write less &do more.其实原生css中,用上css变量也不差,加上bem命 ...
- Spring Boot Logback日志配置
logback的使用: Logback的默认配置 如果配置文件 logback-test.xml 和 logback.xml 都不存在,那么 logback 默认地会调用BasicConfigurat ...
- 将jar包安装到本地repository中
mvn install:install-file -Dfile=G:/lcn_springboot2.0/tx-plugins-db-4.1.2.jar -DgroupId=com.codingapi ...
- 编译原理作业(第一次)-完成retinf.c(阉割版)
首先,作业要求概括如下: 根据前缀表达式文法,实现statements() 和expression() 两个函数. 并且要求使得语义分析在完成分析前缀表达式并输出中间代码的同时,也能够将前缀表达式翻译 ...
- TCP 三次握爪 四次挥手
TCP三次握手和四次挥手过程 1.三次握手 (1)三次握手的详述 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向 ...
- sqlserver2008简介
sql 数据库简介 应该掌握的部分: 1. 数据库的基本概念 2. 数据库模型的基本概念 3. 实体联系模型的基本概念 4. 关系模型的基本概念和性质 5. 数据库优化理论 6. 掌握创建 ...
- Linux----------rsync的介绍及安装使用
目录 一.rsync的介绍 1.1rsync的特点 二.rsync命令 三.rsync的ssh认证协议 四.ssh协议方式使用方法 五.rsync协议方式使用方法即 (rsync + inotifu- ...
- Java技术之如何保证同一资源被多个线程并发访问时的完整性?
常用的同步方法是采用信号或加锁机制,保证资源在任意时刻至多被一个线程访问.Java语言在多线程编程上实现了完全对象化,提供了对同步机制的良好支持. 在Java中一共有四种方法支持同步,其中前三个是同步 ...