Node+Koa+MongoDB基础实践

Node+Koa+MongoDB基础实践

本案例是基于nodejs主要使用koa+mongodb为核心进行学习及完成的一个简单的增删改查应用,希望对正在学习的你有所帮助。

需要的环境:安装node、mongodb

1.案例server结构

在这里插入图片描述

  1. app.js ,项目入口文件;
  2. config ,配置文件,主要包括数据库的连接,端口号等的配置;
  3. routers , 路由层的配置;
  4. app文件下 controllers 控制器文件目录,操作数据库 middleware 自定义中间件目录 models 定义表结构 untils 工具模块目录
先简单用node启个服务
//Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,是运行在服务端的 JavaScript

//引入模块 (require 指令来载入 http 模块,并将实例化的 HTTP 赋值给变量 http)
var http = require("http");  

//创建服务器
http.createServer(function (request, response) {
    // 发送 HTTP 头部 
    // HTTP 状态值: 200 : OK
    // 内容类型: text/plain
    response.writeHead(200, {'Content-Type': 'text/plain'});

    // 发送响应数据 "Hello World"
    response.end('Hello World\n');
}).listen(8888);

//启动服务
node server.js
Server running at http://127.0.0.1:8888/
接下来我们就将安装好的mongo数据库进行连接
先建一个mongo数据库,便于接下来的操作,本案例的数据库为testData
// 通过将useNewUrlParser设置为true,避免“当前URL字符串解析器已被弃用”
mongoose.connect('mongodb://localhost:27017/testData', {useNewUrlParser:true}, (err) => {
    if (err) {
        console.error('Failed to connect to database');
    } else {
        console.log('Connecting database successfully');
    }
});
数据成功后我们需要开始使用koa,具体涉及到的有
1.搭建http服务器
const Koa = require('koa')
const app = new Koa()
app.listen(3000)  //至此koa的服务就搭建好了

2.路由的使用
实现路由功能我们使用到三个中间件,分别是koa-router、koa-body、koa-body-parser
<1> koa-router 来实现最基础的路由功能,将不同的url分发到相应的处理函数中;
<2> koa-body 对post请求的参数进行处理,将处理结果解析到ctx.request.body中,koa-body也能够处理上传文件
文件会被解析到ctx.request.files中;
<3> koa-bodyparser对传参进行校验,get请求会对query进行校验,post请求则对body进行校验,校验方法基于parameter。
3.Context对象
Koa提供一个Context对象,表示一次对话的上下文(包括http的请求对象和响应对象),
通过操作这个对象,就可以控制返回给用户的内容,例如
const Koa = require('koa')
const app = new Koa()

var main = ctx => {
    ctx.response.body = 'hello world'  //Context.response.body 属性就是发送给用户的内容
}
服务端逻辑层
1.在server项目models目录下新建文件用来定义表结构(新建集合)
const mongoose = require('mongoose');

const Schema = mongoose.Schema;
const exampleSchema = new Schema({
  msg: {
    type: String,
    required: true
  },
}, { collection: 'example', versionKey: false});

module.exports = mongoose.model('example', exampleSchema);

collection: ‘example’ 这里是为避免新建的表会带上s后缀

versionKey: false 不需要 __v 字段,默认是加上的

Schema: 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力,
Model: 由Schema发布生成的模型,具有抽象属性和数据库操作能力,可以对数据库进行增删改查mongoose 中任何任何事物都是从 Schema 开始的。每一个 Schema 对应 MongoDB 中的一个集合(collection)Schema 中定义了集合中文档(document)的样式

2.在 controllers 目录下新建一个 example_controller.js ,引入对应模块的表(编写控制器)

const Example_col = require('./../models/example');

//get请求
const getExample = async (ctx, next) => {
  const req = ctx.request.query;

  const examples = await Example_col.find({}, { _id: 0 });

  ctx.status = 200;
  ctx.body = {
    msg: 'get request!!',
    data: {
      data: req,
      examples,
    }
  }
}

//post请求
const postExample = async (ctx, next) => {
  const req = ctx.request.body;

  ctx.status = 200;
  if (!req.msg || typeof req.msg != 'string') {
    ctx.status = 401;
    ctx.body = {
      msg: 'post request!!',
      desc: `parameter error!!msg: ${req.msg}`,
      data: req
    }
    return;
  }

  const result = await Example_col.create({msg: req.msg});

  ctx.body = {
    msg: 'post request!!',
    desc: 'insert success!',
    data: result
  }
}

module.exports = {
  getExample,
  postExample
}
2.在 routes/api 目录下新建一个 example_router.js 文件(编写路由模块)

const Router = require('koa-router');
//引入路由模块实列化
const router = new Router();
//导入对应控制器
const example_controller = require('./../../app/controllers/example_controller');
//为控制器得方法定义请求路径和请求方法
router.get('/example/get', example_controller.getExample);
router.post('/example/post', example_controller.postExample);

module.exports = router;
接下来就可以试试请求接口了,例如:

在这里插入图片描述
在这里插入图片描述
请求之后会发现有跨域问题,我们使用第三方库koa2-cors,在app.js中作为中间件使用

npm install koa2-cors --save  

const cors = require('koa2-cors');
app.use(cors());

PS: 这里要注意一下,js 是单线程语言,中间件是有执行先后顺序的,所以 app.use(cors()) 的使用必须在 router 之前,不然就无法解决跨域的问题!

一个简单的demo就完工啦

交流
1、QQ群:可添加qq群共同进阶学习: 进军全栈工程师疑难解 群号: 856402057

2、公众号:公众号「进军全栈攻城狮」

对前端技术保持学习爱好者欢迎关注公众号共同学习。在进阶的路上,共勉!
在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值