当前位置: 首页 > 后端技术 > Node.js

快速上手:使用node+express搭建API接口

时间:2023-04-03 12:11:56 Node.js

1。在前置环境中部署安装node。请用百度创建一个文件夹来放置node项目。在新建的node文件夹下执行npminit,文件会生成一个包。json文件安装express框架,以及相关依赖npminstallexpressnpminstallbody-parsernpminstallcors--save创建相关文件目录db文件夹:放置数据库操作语句(.js文件)router文件夹:放置接口文件(.js文件))connect.js文件:连接数据库前端等相关操作index.js文件:主文件,引用各个文件,拦截请求,后端路由2、connect.jsconstmysql=require('mysql')constexpress=require('express')constapp=express()constrouter=express.Router();constcors=require('cors');//跨域//导入express-session模块并设置中间件,做登录验证等需要操作session和cookies的模块constsession=require("express-session");constcookieParser=require("cookie-parser")app.use(cors());//解析参数constbodyParser=require('body-parser')//json请求app.use(express.json())//表单请求app.use(express.urlencoded({extended:false}))//设置session和cookie配置项app.use(cookieParser());app.use(session({secret:'keyboardcat',//服务端生成语句可以随意写resave:true,//强制保存session即使没有变化saveUninitialized:true,//强制保存初始化session存储cookie:{//session是基于cookie的,所以配置session的时候可以配置cookiemaxAge:1000*60*30,//设置过期时间secure:false//如果为true,表示只有https协议才能访问cookie}}))/***配置mysql*/constoption={host:'localhost',user:'*****',password:'*****',port:'3306',database:'*****',connectTimeout:5000,//连接超时multipleStatements:false//是否允许一个查询包含多个sql语句}/***设置请求header解决跨域*/varallowCors=function(req,res,next){res.header("Access-Control-Allow-Origin",req.headers.origin);//设置允许跨域请求访问的地方(req.headers.origin为当前访问源域名和端口)res.header("Access-Control-Allow-Methods","GET,PUT,POST,DELETE,选项”);//设置允许接收的请求类型res.header("Access-Control-Allow-Headers","Content-Type,request-origin");//设置请求头中允许的参数res.header("Access-Control-Allow-Credentials","true");//允许客户端使用证书访问,在跨域请求中保留cookie。注意:此处设置为true时,Access-Control-Allow-Origin的值不能为'*'res.header("Access-control-max-age",1000);//设置请求通过pre-check后多久不再检查,减少发送pre-request的次数next();};app.use(allowCors);letpool;repool()//处理返回的数据通过接口,规范返回格式functionRes({code=200,msg='',data={}}){this.code=code;this.msg=味精;this.data=data;}functionresJson(_res,result){if(result){return_res.json(newRes(result))}else{return}}//断线重连机制functionrepool(){//创建连接池pool=mysql.createPool({//创建连接池...option,waitForConnections:true,//当没有连接池可用时,等待(true)或抛出错误(false)connectionLimit:100,//限制连接数queueLimit:0//最大等待连接数(0表示无限制)})pool.on('error',err=>{err.code==='PROTOCOL_CONNECTION_LOST'&&setTimeout(repool,2000)})app.all('*',(_,__,next)=>{pool.getConnection(err=>{err&&setTimeout(repool,2000)||next()})})}module.exports={app,pool,router,resJson}3.db文件夹(sql操作语句)constSQL={queryAll:'select*frombiaomingorderbysiasc',//查询并升序排序updateArt:'updatebiaomingsetsi=?wheresi=?',//changedeleteArt:'deletefrombiaomingwheresi=?',//deleteaddArt:'insertintobiaomingvalues(?,?,?,?,?,?)',//addqueryByIndex:'select*frombiaomingwheresi=?',//序号索引查询queryByLike:'select*frombiaomingwheretitlelike?'//模糊查询}module.exports=SQL4,router文件夹(接口文件)//导入相关模块,本文以登录功能为例,参考请求http://localhost:8088/user/login?name=yourval&password=yourvalconst{pool,router,resJson}=require('../connect')constuserSQL=require('../db/userSQL')conststringRandom=require('string-random');//生成登录验证的随机数/***login*/router.get('/login',(req,res)=>{//本地接口路径http://localhost:8088/user/loginletuser={username:req.query.name,password:req.query.password}let_res=res;//判断参数是否为空if(!user.username){returnresJson(_res,{code:-1,msg:'用户名不能为空'})}if(!user.password){returnresJson(_res,{code:-1,msg:'密码不能为空'})}let_data;constsessran=stringRandom(16,{numbers:true})varusersess=req.session;//从连接池获取连接pool.getConnection((err,conn)=>{//数据库链接conn.query(userSQL.queryByNamePassword,[user.username,user.password],(e,result)=>{//操作数据库if(e)_data={code:-1,msg:e}//通过用户名和密码索引查询数据,如果有数据,说明用户存在??,密码正确.只能返回登录成功,否则用户名不存在或返回登录密码Errorif(result&&result.length){_data={msg:'登录成功',data:{userInfo:{session:sessran}}}req.session.userinfo=sessran;//设置session}else{_data={code:-1,msg:'用户名不存在或登录密码错误'}}setTimeout(()=>{//返回运行结果给前台页面resJson(_res,_data)},500);})pool.releaseConnection(conn)//释放连接池,等待其他连接使用})})module.exports=router;5.index.js入口文件const{app,pool}=require('./connect')constuser=require('./router/user')constpage=require('./router/page')//这个处理全局拦截,必须写在最后上面app.all('*',(req,res,next)=>{next()})//首页路由app.get('/',(req,res)=>{res.sendFile(__dirname+'/'+'index.html')})app.all('/',(req,res)=>{pool.getConnection((err,conn)=>{res.json({type:'test'})pool.releaseConnection(conn)//释放连接池,等待其他连接使用})})app.use('/user',user)app.use('/page',page)//运行端口应用程序。listen(8088,()=>{console.log('servicestartup','localhost:8088')})6.启动服务节点index.js