Node.js(三)路由器、中间件、MySQL模块、RESTful接口-灵析社区

青椒肉丝加点糖

一、路由器

       用来管理路由,将一个模块下所有的路由放到一起,最后被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

阅读量:1033

点赞量:0

收藏量:0