Node.js(三)路由器、中间件、MySQL模块、RESTful接口

举报
敬 之 发表于 2022/04/15 23:28:05 2022/04/15
【摘要】 一、路由器         用来管理路由,将一个模块下所有的路由放到一起,最后被WEB服务器使用。用法如下: //路由器下: const express = require('express'); //引入express const r = expre...

一、路由器

        用来管理路由,将一个模块下所有的路由放到一起,最后被WEB服务器使用。用法如下:

//路由器下:
const express = require('express');  //引入express
const r = express.Router( );  //创建路由器
r.get('/list',(req,res)=>{  //添加路由
	res.send('这是用户列表');
});
module.exports = r;  //导出路由器对象
//WEB服务器下:
const express = require('express');  //引入express
const userRouter = require('./user.js');  //引入用户路由器
console.log(userRouter);
const app = express( );  //创建web服务器
app.listen(8080,()=>{  //设置端口
	console.log('服务器创建成功!');
});
app.use('/user',userRouter);  //使用路由器,把路由器下所有的路由挂载到WEB服务器下,'/user'是为路由添加的前缀

二、中间件

        处于请求和响应之间,可以拦截请求,也可以做出响应。所有中间件在使用前均先创建服务器

1. 应用级中间件

        就是一个函数,一旦拦截到会执行这个函数
        格式:app.use(要拦截的URL,函数)

app.use('/shopping',(req,res,next)=>{  //添加中间件
	//获取get传递的数据
	console.log(req.query);
	req.query.price *= 0.9;
	next( );  //往后执行
});
app.get('/shopping',(req,res)=>{  //添加到购物车
	console.log(req.query);
	res.send(`商品的价格:${req.query.price}`);
});

2. 路由级中间件

        路由器的使用
        app.use(要拦截的URL,路由器) 

3. 内置中间件

        用于托管静态资源,如果客户端托管静态资源(html、css、js、图像......),不需要通过路由器响应,而是自动的到指定的目录下寻找。

        格式:app.use(express.static(托管的目录的路径));

app.use(express.static('./public'));

4. 第三方中间件

        属于第三方模块,使用前需要先下载安装。

5. 错误处理中间件

//格式:在路由中
app.get('/list',(req,res,next)=>{
     next(错误信息) //把错误交给错误处理中间件
});

eg:
//添加错误处理中间件,拦截所有路由中产生的错误
app.use((err,req,res,next)=>{
	//err 所接收到的路由传递过来的错误信息
	console.log(err);
	res.status(500).send({code:500,msg:'服务器端错误!'});  //响应错误
});

三、MySQL模块

1. 使用步骤

(1)引入MySQL模块

const mysql = require('mysql');

(2)创建一个连接对象

const c = mysql.createConnection({
    host:'127.0.0.1',
    port:'3306',
    user:'root',
    password:'',
    database:'tedu'
});

(3)执行SQL命令

c.query('select * from emp where ename=?',[str],(err,result)=>{
    if(err) throw err;
    console.log(result);
});

2. 连接池

        创建的一批连接,可以被反复使用,用完后会归还。

(1)引入MySQL模块

const mysql = require('mysql');

(2)createPool( )  创建连接池对象

const pool = mysql.createPool({
    host:'127.0.0.1',
    port:'3306',
    user:'root',
    password:'',
    database:'tedu',
    connectionLimit:15 //连接池数量
});

(3)query( )  执行SQL命令

pool.query('select * from emp',(err,result)=>{
    if (err) throw err;
    console.log(result);
});

四、RESTful接口

        接口是后端为前端提供的动态资源(对数据的增删改查),而RESTful则是一种接口设计规范。

1. URL 

http://127.0.0.1:8080/v1/emps          //多个资源
http://127.0.0.1:8080/v1/emps/3       //单个资源(v1版本号、emps 资源名称(复数形式)、3编号)
http://127.0.0.1:8080/v1/users/login //对资源的特殊操作例如登录

2. 请求方法

        对资源的操作方式,包括 get(获取资源)post(新建资源)delete(删除资源)put(修改资源)

3. 过滤数据

eg:        

http://127.0.0.1:8080/v1/products?price1=4000&price2=5000   //过滤一组价格区间的数据
http://127.0.0.1:8080/v1/products?pno=1&count=9                    //通过分页过滤

4. 返回结果

        格式为 JSON 对象:字符串形式的对象,属性名必须是双引号,属性值是字符串且必须用双引号,包含状态码(人为规定)、消息、数据。格式如下:

{
     "code":200,
     "msg":"登录成功"
}
{ "code":200,"msg":"登录成功","data":[ ] }

推荐接口工具: ApiPost

文章来源: majinjian.blog.csdn.net,作者:Developer 小马,版权归原作者所有,如需转载,请联系作者。

原文链接:majinjian.blog.csdn.net/article/details/119481637

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。