1.首先要先安装一些依赖(这里使用的是npm)
(1).下载安装express
npm install express
//下载 express 框架
(2).下载安装 bady-parser
npm install bady-parser
//用于解析 json text 等格式的数据
(3).下载安装 cookie-parser 和cookie-session依赖
npm install cookie-parser
npm install cookie-session
//用于解析cookie
2.node.js服务的入口文件的编写(启动文件的编写): 这里我命名为 server.js 文件
//引入上面下载安装好的 express 框架模块
const express=require('express');
//引入bady-parser 用于解析 json text等格式的数据
const badyParser=require('bady-parser');
//引入cookie 解析模块
const cookieParser=require('cookie-parser');
const cookieSession=require('cookie-session');
//利用express模块方法生成 express对象
const server=express();
//解析 json数据 解析头文件为 application/json
server.use(bodyParser.json());
//使用 express 对象设置传输数据键值对的格式 use方法就是引入使用一个只中间件 解析头文件为 application/x-www-form-urlencoded
server.use(bodyParser.urlencoded({ extended:false })); // 解析请求体中的信息 并将返回的数据存入request 的 body中, 只支持utf-8的编码的字符,也支持自动的解析gzip和 zlib 设置为false 则数据的值 为string array类型,设置为true 则为任何类型
//为所有的请求接口做一些处理:例如跨域...
//* 是匹配所有 server.all()方法是最先执行的中间件,所有 server.use()的中间件都会先经过all
server.all('*',(req,res,next)=>{
//设置允许任何域访问 解决跨域问题
res.header('Access-Control-Allow-Origin','*');
//设置 允许任何 数据类型
res.header('Access-Control-Allow-Headers','Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
//设置 允许 使用的HTTP方法
res.header('Access-Control-Allow-Methods','PUT, POST, GET, DELETE, OPTIONS');
//过滤预请求
if(req.method==='OPTIONS'){
res.send(200); //如果是预请求 就不再进行后面的中间件匹配执行了 直接发送回数据
}else{
next();// 进入下一个中间件
}
})
//监听的端口号
server.listen(3000,()=>{
console.log("正在监听3000端口");
})
//匹配到 / 就会执行: 所以我所有前端的请求接口前面都会加/ -----eg: /getInfo /deleteInfo
server.use('/',require('./route/index.js')());
3.创建 index.js 文件 (用于连接操作数据库的文件)
//由于还是要使用到express模块所以继续引入
const express=require('express');
//引入数据库模块 这里我使用的是mysql 使用什么引入什么
const mysql=require('mysql');
//创建连接池 请求过一次之后,会有缓存之后请求就不用重新连接数据库了 从而减少了连接数据库的次数 提高效率
const db=mysql.createPool({
host:'localhost',//数据库的地址 我这里是在我本地 所以写的是 localhost
user:'root', //数据库登陆名
password:'root', //数据库登陆密码 这里我设置的都是 root
database:'test' //连接的库名 这里我使用的是 test 数据库
})
//导出 一个箭头函数 所有的接口逻辑 都在这个函数内
module.exports= ()=>{
//创建 路由 路径 的链式句柄
const route=express.Router(); //后面定义一个接口 就直接使用 route.xxx 即可
conts getInfoStr=`SELECT id,user,message,test,is_vip FROM firsttable`;//获取表格信息
/*
... 接口
定义一个get请求接口 接口名为:/getInfo
eg: route.get('/getInfo',(req,res)=>{
getInfo(getInfoStr,res); //调用方法 并且将res传入 用于发送数据
})
function getInfo(getInfoStr,res){
//使用连接池对象调用 query进行数据库操作 第一个参数为 sql操作语句
db.query(getInfoStr,(err,data)=>{
if(err){//出错了
res.status(500).send('database err').end();//将响应状态值设置为500 并且返回 database err 字符串 end()方法是为了防止客户端没有接收到数据而一直处于等待状态
}else{//没出错
res.send(data)
}
})
}
设置一个post接口
route.post('/addInfo',(req,res)=>{
// 获取post 请求客户端传的数据 get请求 是使用 req.query.xxx访问 传的数据都存储在req.query里面了
let obj={};
for(let attr in req.body){ // req.body === {'前端传过来的数据对象': ''} 所以 取到前端传过来的对象需要取 req.body 的键名 并且还要将其转化为 普通对象 (因为他是字符串对象)
obj=JSON.parse(attr);
}
console.log(req.body);
console.log(obj);
let {user,message,is_vip,test}=obj;
message=JSON.stringify(message);
test=JSON.stringify(test);
//添加数据的 数据库 命令
let addInfoStr=`INSERT INTO firsttable(user,message,is_vip,test) VALUES('${user}','${message}','${is_vip}','${test}')`;
addInfo(addInfoStr,res);
})
function addInfo(addInfoStr,res){
db.query(addInfoStr,(err,data)=>{
if(err){
console.log(err);
res.status(202).send({'msg':err.sqlMessage,'status':500}).end();//调用end方法防止 客户端一直等待响应数据
}else{
res.send({"msg":"添加成功!","status":200,"data":data}).end();
}
})
}
*/
}
实现一些简单增删改查的接口大致模板就是这样。