当前位置:   article > 正文

node搭建api服务_nodejs制作api

nodejs制作api

1.初始化项目

1. npm init -y

2. .gitignore 文件

git 忽略文件配置

2. 项目搭建

1.安ko2

2.编写app

const Koa = require('koa')

const app  = new Koa


app.use((ctx,next)=>{
  ctx.body = 'hello api'
})

app.listen(3000,()=>{
  console.log('server is running on http://localhost:3000');
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3.测试

启动

node main.js

访问

http://localhost:3000

2.基本优化

1.自动重启服务

nodemon工具
npm install nodemon -D
编写启动脚本 “dev”:“nodemon ./src/main.js”,
输入命令启动 npm run dev
文件改动后会自动重启服务

{
  "name": "node-builds-api-service-n",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev":"nodemon ./src/main.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "https://gitee.com/Ashes_of_time_y/node-builds-api-service-n.git"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "koa": "^2.13.4",
    "nodemon": "^2.0.20"
  }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

2.读取配置文件

1.npm i dotenv

2.根目录新建.env文件

3.src目录下新建config/config.default.js文件

// config.default.js
const dotenv = require('dotenv')


dotenv.config()


console.log(process.env.APP_PORT);

module.exports  =process.env
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4.main.js导入config.default.js

const {APP_PORT} = require('./config/config.default.js')

// main.js

const Koa = require('koa')
const {APP_PORT}  = require('./config/config.default.js')
const app  = new Koa


app.use((ctx,next)=>{
  ctx.body = 'hello api1111111'
})

app.listen(APP_PORT,()=>{
  console.log(`server is running on http://localhost:${APP_PORT}`);
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

5.启动服务

npm run dev

4.添加路由

根据不同url调用不同处理函数,返回不同数据

1.安装koa-router

npm install

// 简单路由

// main.js

const Koa = require('koa')
const {APP_PORT}  = require('./config/config.default.js')
const app  = new Koa

// 路由
const Router = require('koa-router')
const indexRouter = new Router()

indexRouter.get('/',(ctx,next)=>{
  ctx.body = 'hello index'
})


const userRouter=  new Router()
userRouter.get('/users',(ctx,next)=>{
  ctx.body = 'hello users'
})

// 注册中间件
// app.use((ctx,next)=>{
//   ctx.body = 'hello api11111'
// })
app.use(indexRouter.routes())
app.use(userRouter.routes())




app.listen(APP_PORT,()=>{
  console.log(`server is running on http://localhost:${APP_PORT}`);
})

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

2.优化路由

1.在src文件夹下面创建router文件夹

src目录下面创建user.route.js


//user.route.js
const Router = require('koa-router')


const router = new Router({prefix:'/users'})

router.get('/',(ctx,next)=>{
  ctx.body = 'hello users'
})



module.exports = router
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

2.改写main.js

// main.js

const Koa = require('koa')
const {APP_PORT}  = require('./config/config.default.js')
const userRouter =require('./router/user.route.js')
const app  = new Koa


app.use(userRouter.routes())

app.listen(APP_PORT,()=>{
  console.log(`server is running on http://localhost:${APP_PORT}`);
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

5.目录结构优化

1.将http服务和APP业务拆分

src目录下面新建APP目录,APP目录下面新建index.js

// app/index.js

const Koa = require('koa')
const userRouter =require('../router/user.route.js')
const app  = new Koa()

app.use(userRouter.routes())

module.exports = app
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
// 改写main.js


const {APP_PORT}  = require('./config/config.default.js')


const app = require('./app/index.js')


app.listen(APP_PORT,()=>{
  console.log(`server is running on http://localhost:${APP_PORT}`);
})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2.路由与控制器方法分离

路由:解析url,不同的路由分发给对应的控制器方法
控制器:处理不同的业务

1.src下面新建controller文件夹 ,文件夹下面写控制器类方法

user.controller.js

// user.controller.js

class UserController{

  async register(ctx,next){
    ctx.body = "用户注册成功!"
  }
  async login(ctx,next){
    ctx.body = "登录成功!"
  }

}
module.exports = new UserController()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

2.路由中导入控制器方法


//user.route.js
const Router = require('koa-router')
const {register,login} =require('../controller/user.controller')



const router = new Router({prefix:'/users'})

// router.get('/',(ctx,next)=>{
//   ctx.body = 'hello users'
// })

// 注册接口
router.get('/register',register)

// 登录接口
router.get('/login',login)


// 测试
// http://localhost:8000/users/register
// http://localhost:8000/users/login


module.exports = router
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

6.解析body

1.安装koa-body


// app/index.js

const Koa = require('koa')

// 1.引入koabody
const KoaBody = require('koa-body')
const userRouter =require('../router/user.route.js')
const app  = new Koa()

// use koabody
app.use(KoaBody())
app.use(userRouter.routes())

module.exports = app
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

// user.controller.js

class UserController{

  async register(ctx,next){
    // 1.获取数据
    console.log(ctx.request.body);   //使用koabody
    // 2.操作数据库

    // 3.返回数据
    ctx.body = ctx.request.body+'我草!'
    
  }
  async login(ctx,next){
    ctx.body = "登录成功!"
  }
  async baidu_map(ctx,next){
    ctx.body = "bauidu地图"
  }
}



module.exports = new UserController()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

2.创建service层,操作数据库

创建service文件夹
创建user.service.js文件

class UserSevice {

  async createUesr(username,password){
//todo...
    return '创建用户成功!'
  }
}

module.exports = new UserSevice()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
// user.controller.js
const {createUesr} = require('../service/user.service')
class UserController{

  async register(ctx,next){
    // 1.获取数据
    // console.log(ctx.request.body);
    
   const {username,userpassword} = ctx.request.body

   console.log(username,userpassword);

    // 2.操作数据库
    const res = await createUesr(username,userpassword)
    console.log(res,"rse");
    // 3.返回数据
    
    ctx.body = {username,userpassword}
    
  }
  async login(ctx,next){
    ctx.body = "登录成功!"
  }
  async baidu_map(ctx,next){
    ctx.body = "bauidu地图"
  }
}

module.exports = new UserController()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

b站

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/68982
推荐阅读
相关标签
  

闽ICP备14008679号