node搭建api服务

本文详细介绍了如何使用 Node.js 和 Koa 框架搭建 RESTful API 服务,从初始化项目、设置自动重启到优化路由和配置文件读取。此外,还讲解了目录结构的优化,如拆分 HTTP 服务和业务逻辑,以及控制器和路由的分离。最后,涉及了请求体解析和数据库操作。通过这些步骤,读者可以构建出一个高效、可维护的 API 服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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');
})

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"
  }
}

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

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}`);
})

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}`);
})

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

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}`);
})

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
// 改写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}`);
})

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()

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

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

// 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()

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

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

class UserSevice {

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

module.exports = new UserSevice()
// 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()

b站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wei13013451000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值