Node搭建api接口

Node搭建api接口

2023年7月7日发(作者:)

Node搭建api接⼝⼀、NodeApi 环境搭建创建⽂件夹新建⼀个⽂件夹 nodeApi在本地终端运⾏npm init创建⼀个 ⽂件修改 "scripts": { "start": "node server" },将原来的test启动命令修改为现在的dev,node server的意思是⽤node启动本地⽂件,所以我们要在当前⽂件夹下在创建⼀个安装依赖在本地终端运⾏cnpm install express dotenv --save//如果你没有全局安装过nodemon,需要先全局安装⼀次cnpm install -g nodemon//然后在开发环境安装cnpm install -D nodemon修改,添加⼀个⽤nodemon启动项⽬的新命令 "dev":"nodemon server"npm安装⽐较慢,这⾥我是⽤淘宝源来安装我们搭建本次项⽬所需要的环境依赖。其中express是node的⼀个框架,每次修改⽂件都需要重启服务器,所以我们需要nodemon来帮助我们重启。⽽dotenv呢?由于项⽬不同需求,需要配置不同环境变量,按需加载不同的环境变量⽂件,使⽤dotenv,可以完美解决这⼀问题。创建环境变量在当前⽬录下新建⽂件夹config,在config⽂件夹下新建⽂件E_ENV=developmentPORT=5000复制上述代码到新创建的⽂件下修改⽂件"start": "NODE_ENV=production node server",当等于⽣产环境的时候,让我们运⾏ node server来启动项⽬引⼊依赖和环境变量并使⽤const express = require("express")const dotenv = require("dotenv")({ path:'./config/',});const app = express();const PORT = || 3000;(PORT,(`Server rnning in ${_ENV} mode on port ${PORT}`))运⾏ npm run dev 会发现我们运⾏成功,监听到的是5000端⼝,这说明环境变量的和依赖的引⼊没有问题创建路由下⾯是Node接收get请求返回数据的⼏种⽅式// localhost:5000/("/",(req,res)=>{ // ("

Hello World

") 发送HTML // ({mag:"Hello World"}) 发送json格式数据 // ({success:true}) 发送json格式数据 // atus(400) 发送状态码 (200).json({success:true,msg:"Hello World"}) //发送状态码和json数据})上⾯我们访问的都是根路径,现在我们尝试给他新的路由地址及尝试新的请求⽅法// localhost:5000/api:("/api/:id",(req,res)=>{ (200).json({success:true,msg:`根据${}获取单个数据`})})// localhost:5000/("/api",(req,res)=>{ (200).json({success:true,msg:`创建新的数据`})})// localhost:5000/api:("/api/:id",(req,res)=>{ (200).json({success:true,msg:`根据${}更新数据`})})// localhost:5000/api:("/api/:id",(req,res)=>{ (200).json({success:true,msg:`根据${}删除数据`})})路由⽂件分离前⾯我们做到了创建各种接⼝,可以想象⼀下,如果项⽬⾜够⼤的话,把接⼝放在⼀起,是不是很不利于维护,接下来我们要做的就是把路由⽂件分离,拆分成⼀⼩块⼀⼩块。在当前⽬录下新建routes⽂件夹,在routes⽂件夹下新建,其中routes⽤来存放我们所有的接⼝,api⽂件存放访问/api这个路径下的接⼝完整代码如下:/routes/t express = require("express")const router = express()("/",(req,res)=>{ (200).json({success:true,msg:"获取所有数据"})

})("/:id",(req,res)=>{ (200).json({success:true,msg:`根据${}获取单个数据`})})("/",(req,res)=>{ (200).json({success:true,msg:`创建新的数据`})})("/:id",(req,res)=>{ (200).json({success:true,msg:`根据${}更新数据`})})("/:id",(req,res)=>{ (200).json({success:true,msg:`根据${}删除数据`})})s = t express = require("express")const dotenv = require("dotenv")const app = express()({ path:'./config/',});const api = require("./routes/api")('/api',api)const PORT = || 3000;(PORT,(`Server rnning in ${_ENV} mode on port ${PORT}`))上述代码中,我们通过require将api引⼊到了中,并通过()这个⽅法挂载到当访问/api路径时,将通过api这个⽂件来处理请求。优化路由在中,我们可以看到尽管请求⽅法不⼀样,但请求的路径⼤多相同,现在让我们来优化⼀下吧在当前⽬录下新建⽂件夹controllers,在controllers⽂件夹下新建,代码如下:/controllers/s = (req,res,next) => { (200).json({success:true,msg:"获取所有数据"});}Api = (req,res,next) => { (200).json({success:true,msg:`创建新的数据`})} = (req,res,next) => { (200).json({success:true,msg:`根据${}获取单个数据`})}Api = (req,res,next) => { (200).json({success:true,msg:`根据${}更新数据`})}Api = (req,res,next) => { (200).json({success:true,msg:`根据${}删除数据`})}在 /routes/ 引⼊刚刚创建的⽂件并修改代码const express = require("express")const router = express()//引⼊控制器const {getApis,createApi,getApi,updateApi,deleteApi} = require('../controllers/api')("/").get(getApis).post(createApi)("/:id").get(getApi).put(updateApi).delete(deleteApi)s = router可以看到我们的代码明显简洁了许多中间件安装margancnpm install margan --save在下使⽤// 引⼊morgan中间件const morgan = require('morgan')// 使⽤morgan中间件(morgan("dev"))使⽤ 可以将请求信息打印在控制台,便于开发调试安装colorscnpm i colors --save在下使⽤(PORT,(`Server rnning in ${_ENV} mode on port ${PORT}`.))使⽤ 可以改变打印信息的颜⾊连接mongodb数据库cnpm i mongoose --save在 加⼀个连接mongodb数据库地址的环境变量mongodb://127.0.0.1:27017在config新建t mongoose = require('mongoose')const connectDB = async () => { const conn = await t(_MONGO_URI, { //避免警告信息 useNewUrlParser: true, useUnifiedTopology:true, useCreateIndex:true, useFindAndModify:false }); (`MongoDB Connected: ${}`.);}s = connectDB在中启动数据库const connectDB = require('./config/db')...// 链接数据库connectDB()连接mongodb数据库错误处理("unhandledRejection",(err,promise) => { (`Error:${e}`.); //关闭服务器 & 退出进程 (() => { (1) })})对于mongoose不熟悉的可以查阅这篇⽂章:⼆、搭建⽤户数据创建数据模型在当前⽬录下新建⽂件夹models,在⽂件夹下新建t mongoose = require("mongoose");const UserInfoSchema = new ({ name: { type: String, //类型 require: [true, '请填写⽤户名'], //是否必须填写 unique: true, //是否唯⼀ trim: true, //去掉空格 maxlength: [20, '⽤户名不能超过20个字'] //最⼤长度 }, description: { type: String, require: [true, '请填写个⼈简介'], maxlength: [500, '个⼈简介不能超过500个字'] }, website: { type: String, match: [/[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.?/, '请填写合法的⽹址'], //正则匹配 }, phone: { type: String, match: [/^[1][3,4,5,7,8][0-9]{9}$/, '请填写正确的⼿机号'], }, email: { type: String, match: [/^([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+.[a-zA-Z]{2,3}$/, '请填写正确的邮箱地址'], }, address: { type: String, default: '江西省抚州市临川区' //默认值 }, address: { type: String, default: '江西省抚州市临川区' //默认值 }, occupation: { type: String, default: '前端开发⼯程师' }, skill: { type: Array, default: ['html', 'js', 'css', 'vue', 'react', ''] }, createdAt:{ type:Date, default: }})s = ('UserInfo',UserInfoSchema)

发布者:admin,转转请注明出处:http://www.yc00.com/news/1688683861a162286.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信