彪码 用koa来实现restful风格 的 接口吧(基础篇)

本文介绍了如何使用Node.js和Koa框架搭建API,包括初始化项目、安装依赖、创建路由、处理HTTP请求方法、配置Koa-body以支持POST请求,以及创建子路由。同时,展示了如何连接MongoDB数据库,并通过mongoose模块进行操作。最后,讨论了路由的优化和代码分离,以提高代码组织性和可维护性。

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

首先呢 我们要先创建一个文件夹  开启终端服务

 

初始化一下 package.json 文件夹  我们可以在 这个里面看到我们下载的依赖

npm init -y

 安装 框架 路由

npm i koa koa-router --save //安装到生产环境

 安装nodemon

npm i nodemon -D //安装到开发环境 用来监视node.js 的任何更改 之后 重启服务

 "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start":"nodemon app.js"
  },

配置到 package.json 里 的 scripts(指定运行脚本命令)

创建一个app.js

//引入 koa koa-router
const Koa = require('koa');
const Router = require('koa-router');
//实例化
const app = new Koa();
const router = new Router();

//get 请求 用来获取数据
router.get('/', ctx => {
  ctx.body = "我是用户列表"
})
//get 请求 用来获取指定数据
router.get('/:id', ctx => {
  console.log(ctx.params.id)
  ctx.body = "获取某一个用户"
})
//post 请求 用来进行添加 登录 注册
router.post('/', ctx => {
  ctx.body = "添加一个新的用户"
})
//put 请求 用来进行修改某一项数据
router.put('/:id', ctx => {
  ctx.body = "修改用户成功"
})
//delete 请求 用来删除某一项数据
router.delete('/:id', ctx => {
  ctx.body = "删除用户成功"
})
//抛出路由
module.exports = router.routes();

app.use(router.routes()).use(router.allowedMethods());
//监听3000端口
app.listen(3000, () => {
  console.log('正在监听3000端口的服务')
})

启动 服务 

npm run start  // 刚刚在scripts 里面配置的运行脚本指令

启动成功效果

 启动服务 我们可以根据 在地址栏 输入 端口号 localhost:3000 去进行查看 配置的路由

由于我这里的 端口号 3000 被占用 所以 将端口号改成了3001

配置koa-body

 我们现在 get 的方式请求路由 但是我将 get 改为post之后

//get 请求 用来获取数据
router.post('/', ctx => {
    ctx.body = "我是用户列表"
  })

 报错 并且页面显示 

Method Not Allowed(不允许此方法) 

因为我们的post请求 属于 密文请求 所以不会将数据在页面显示 

我们需要安装koa-body 才可以使用 post 请求 我们的koa-body  在引入 使用的时候要放在 路由前面   

npm i koa-body --save 

使用方法 

const koaBody=require('koa-body')
app.use(koaBody()) 
app.use(router.routes()).use(router.allowedMethods());

页面显示效果

 这个时候 说明配置成功了

创建一个 routers 文件夹 并且在文件夹下面创建一个user子路由

 routers/user.js

const Router = require('koa-router');
const router = new Router({prefix:'/user'});
router.get('/',async ctx=>{
    ctx.body="我是User页面"
})
module.exports=router.routes()

app.js

const Koa = require('koa');
const Router = require('koa-router');

const app = new Koa();
const router = new Router();
const koaBody=require('koa-body')
const User=require('./routers/user')
//get 请求 用来获取数据
router.post('/', ctx => {
    ctx.body = "我是用户列表"
  })
  //get 请求 用来获取指定数据
  router.get('/:id', ctx => {
    console.log(ctx.params.id)
    ctx.body = "获取某一个用户"
  })
  //post 请求 用来进行添加 登录 注册
  router.post('/', ctx => {
    ctx.body = "添加一个新的用户"
  })
  //put 请求 用来进行修改某一项数据
  router.put('/:id', ctx => {
    ctx.body = "修改用户成功"
  })
  //delete 请求 用来删除某一项数据
  router.delete('/:id', ctx => {
    ctx.body = "删除用户成功"
  })
app.use(koaBody())
app.use(User)
app.use(router.routes()).use(router.allowedMethods());

app.listen(3001, () => {
  console.log('正在监听3001端口的服务')
})

 连接数据库

现在 实现了 接口之后 就连接数据库吧 我这里连接 的是mongoDB 数据库

npm i mongoose 

 app.js

const mongoose = require('mongoose');
// mongoose.connect('mongodb://localhost/文件夹名称');
mongoose.connect('mongodb://localhost/king');
var db = mongoose.connection;
db.on('error', console.error.bind(console, '连接失败!!!'));
db.once('open', function () {
  console.log('连接成功!!!')
});

效果

 优化路由

优化路由 是为了 将来 我们的路由会越来越多 ,这样 我们每一次都需要在 app.js 里面去引入路由

这样就非常的麻烦 ,所以这样会节省我们的时间

routers/index.js

const fs = require("fs");
module.exports = (app) => {
  fs.readdirSync(__dirname).forEach((file) => {
    if (file === "index.js") {
      return false;
    }
    const router = require(`./${file}`);
    app.use(router.routes()).use(router.allowedMethods());
  });
};

app.js

将app里面 引入的路由删除 引入 routers下面的index.js文件

const routing=require('./routers/index')

mongoose.connect('mongodb://localhost/king');
var db = mongoose.connection;
db.on('error', console.error.bind(console, '连接失败!!!'));
db.once('open', function () {
  console.log('连接成功!!!')
});

app.use(router.routes()).use(router.allowedMethods());
routing(app)

这样 我们 在routers文件夹下面再去创建子路由 就不需要引入了 

代码分离

代码分离 是让我们的路由页面和逻辑给拆分开 这样我们的代码不会出现混淆的情况 会让代码的阅读者 容易阅读

创建 controllers/userDemo.js

const User=async ctx=>{
    ctx.body="我是User页面"
}

module.exports={User}

user.js

const Router = require('koa-router');
const router = new Router({prefix:'/user'});
const {User}=require('../controllers/userDemo')

router.get('/',User)

module.exports=router

让困难打掉脆弱的铁屑 铸成锋利的钢刀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值