资讯专栏INFORMATION COLUMN

适合初学者的koa2+mongodb初体验

Jacendfeng / 526人阅读

摘要:前言笔者的前端开发已经有些时日了,对于一直保留着最初的恐惧,倘若一座不可跨越的高山,思前想后终于迈出最后一步,踏入了开拓自己视野的新视界,希望在看这篇文章的你可以一起跟我动手尝试。面向的下一代框架。由团队打造,特点优雅简洁灵活体积小。

前言

     笔者的前端开发已经有些时日了,对于node一直保留着最初的恐惧,倘若一座不可跨越的高山,思前想后终于迈出最后一步,踏入了开拓自己视野的新视界,希望在看这篇文章的你可以一起跟我动手尝试。

     如果你是个急性子,我就提供一波传送门 github:https://github.com/tenggouwa/...

     你可以先star,再拉代码,慢慢的看这篇文章。

KOA
next generation web framework for node.js

面向node.js的下一代web框架。

由Express团队打造,特点:优雅、简洁、灵活、体积小。几乎所有功能都需要通过中间件实现。

环境搭建

node

node官方下载地址: https://nodejs.org/zh-cn/down...

mongodb

mac下mongodb安装教程: https://www.jianshu.com/p/724...

windows下mongodb安装教程: https://blog.csdn.net/zhongka...

robomongo(mongodb数据库可视化--免费): https://robomongo.org/download

本地安装nodemon

nodemon会监听你的代码,当有变动的时候自动帮你重启项目(好东西)

npm: https://www.npmjs.com/package...

yarn(选装)---代替npm/cnpm

homebrew(选装)---包版本管理工具

Hello World!!!

创建目录

mkdir node-app && cd node-app

npm init

yarn add koa -S

touch app.js

在编辑器中打开app.js并输入以下代码

const Koa = require("koa");
const app = new Koa();
    app.use(async ctx => {
    // ctx.body 即服务端响应的数据
    await ctx.body = "Hello world!!!";
})
// 监听端口、启动程序
app.listen(3000, err => {
    if (err) throw err;
        console.log("runing at 3000");
    })

启动app.js

node appnodemon app

本地访问localhost:3000

got it!!!!

KoaRouter

安装koa-router

yarn add koa-router -S

koa-app目录下新建controller文件,controller下新建home.js

koa-app目录下新建router.js 并输入以下代码controller文件,

const router = require("koa-router")()
    module.exports = (app) => {
    router.get( "/index", app.controller.home.index )
}

home.js输入以下代码

module.exports = {
    index: async(ctx, next) => {
        console.log(ctx) // 输出ctx 以查看内容
        ctx.response.body = "

HOME page index

" }, }

运行代码 node appnodemon app

本地访问localhost:3000/index

got it!!!!

处理post

koa-bodyparser

安装koa-bodyparser

yarn add koa-bodyparser -S

router.js添加代码

router.post( "/post", bodyParser(), app.controller.home.post ) // 重点在"post"后面的bodyParser()

home.js添加代码

post: async(ctx, next) => {
    console.log(ctx.request.body) // 输出ctx 以查看内容
},

使用postman创建post请求,访问localhost:3000/post, 并传递参数,看终端返回内容

got it!!!

处理跨域

koa2-cors安装

yarn add koa2-cors -S

在app.js内添加如下代码

const cors = require("koa2-cors")
    .......
    // 其他代码
app.use(cors())

至此,我们就拥有了一套简单的koa项目,可以进行前后台交互,或者mock数据搭建
mongodb

在环境搭建中可以看到安装mongodb以及数据库可视化的方法

在项目中yarn add mongoose -S

创建models文件夹并在app.js添加如下代码

const mongoose = require("mongoose")
const path = require("path")
const fs = require("fs")

// 链接数据库一定放在koa前面
mongoose.Promise = require("bluebird")
mongoose.connect("mongodb://127.0.0.1/tenggouwa",{useNewUrlParser: true})
// 获取数据库表对应的js对象所在的路径
const models_path = path.join(__dirname, "./models")
// 已递归的形式,读取models文件夹下的js模型文件,并require
var walk = function(modelPath) {
    fs
        .readdirSync(modelPath)
        .forEach(function(file) {
        var filePath = path.join(modelPath, "/" + file)
        var stat = fs.statSync(filePath)
        if (stat.isFile()) {
            if (/(.*).(js|coffee)/.test(file)) {
                require(filePath)
            }
        } else if (stat.isDirectory()) {
            walk(filePath)
        }
    })
}

walk(models_path)

这一步可以将项目与mongodb链接

在models里创建block.js并加入如下代码

"use strict"
var mongoose = require("mongoose")
var Schema = mongoose.Schema;
/**
* 定义一个模式(相当于传统意义的表结构)
* 每个模式映射mongoDB的一个集合,
* 它定义(只是定义,不是实现)这个集合里面文档的结构,就是定义这个文档有什么字段,字段类型是什么,字段默认值是什么等。
* 除了定义结构外,还定义文档的实例方法,静态模型方法,复合索引,中间件等

*/
var BlockSchema = new Schema({
    peers: String,
    blocks: String,
    createAt: {
        type: Date,
        default: Date.now()
    },
    updateAt: {
        type: Date,
        dafault: Date.now()
    }
})
/**
* 定义模型
* 模型用来实现我们定义的模式,调用mongoose.model来编译Schema得到Model
* @type {[type]}
*/
// 参数User 数据库中的集合名称, 不存在会创建.
// console.log(BlockSchema)
var Block = mongoose.model("Block", BlockSchema)
module.exports = Block
```

这一步是为了添加传统意义上的表结构,并放到Block表里面

接下来我们就可以在controller里面去操纵mongodb,进行业务操作了。例如:

delBlock: async(ctx, next) => {
    const params = ctx.request.body // 拿到返回的参数
    const result = await Block.where({ // 通过id去Block里面查找对应数据
        _id: params.id
    }).remove() // 将该条数据删除
},

got it!!!

mongodb常用操作

保存数据

save()

查取数据

查询 find() finOne()

where()

更改数据

where().update()

删除数据

where().remove()

排序

find().sort()

分页

find().sort().skip(页码).limit(单页数据)

got it!!!

Just Do It 写在最后

当你看完这篇文章,你已经明白基本的koa+mongdb的用法了,希望你可以通过学习node以及其生态,提升自己的知识储备
跟笔者一起加油!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105059.html

相关文章

  • 《Node.js从入门到上线》入门篇 (持续更新中)

    摘要:最近利用空闲时间写了一个从入门到上线的的实战教程从入门到上线目前还在更新中,入门篇已基本成型。本项目使用语法,采用搭建了一个博客系统,实现了文章管理用户登录注册权限控制分类管理等功能。实现线上部署左手代码右手砖抛砖引玉 最近利用空闲时间写了一个从入门到上线的的node实战教程《Node.js从入门到上线》A blog build with Koa2. 目前还在更新中,入门篇已基本成型。...

    CocoaChina 评论0 收藏0
  • MongoDB Change Stream体验

    摘要:可以发现,整个同步过程是依赖于来进行的。不考虑导致的问题,正常的应用升级也会导致应用中断运行。注意事项为了避免被回滚的更新被发布出去,选择只在一个变更到达大多数节点不可能被回滚时,才会将这些变更发布到应用。 Change Stream是MongoDB从3.6开始支持的新特性。这个新特性有哪些奇妙之处,会给我们带来什么便利?本次的文章将就这个主题进行初步讨论。 Change Stream...

    1fe1se 评论0 收藏0
  • 前端小白全栈体验

    摘要:原文来源全栈初体验前言据说现在不会点后台的前端都找不到工作了吓得我这几天看起了和并且做了一个应该算是最简单的前后端例子,如图输入账户密码,提交表单,保存信息到数据库再重定向到页面获取数据库中的信息,渲染在浏览器上具体代码主要技术前端模板后台 原文来源: 全栈初体验 前言 据说现在不会点后台的前端都找不到工作了吓得我这几天看起了Nodejs和MongoDB并且做了一个应该算是最简单的前后...

    wangym 评论0 收藏0
  • 前端小白全栈体验

    摘要:原文来源全栈初体验前言据说现在不会点后台的前端都找不到工作了吓得我这几天看起了和并且做了一个应该算是最简单的前后端例子,如图输入账户密码,提交表单,保存信息到数据库再重定向到页面获取数据库中的信息,渲染在浏览器上具体代码主要技术前端模板后台 原文来源: 全栈初体验 前言 据说现在不会点后台的前端都找不到工作了吓得我这几天看起了Nodejs和MongoDB并且做了一个应该算是最简单的前后...

    Jioby 评论0 收藏0
  • 前端小白全栈体验

    摘要:原文来源全栈初体验前言据说现在不会点后台的前端都找不到工作了吓得我这几天看起了和并且做了一个应该算是最简单的前后端例子,如图输入账户密码,提交表单,保存信息到数据库再重定向到页面获取数据库中的信息,渲染在浏览器上具体代码主要技术前端模板后台 原文来源: 全栈初体验 前言 据说现在不会点后台的前端都找不到工作了吓得我这几天看起了Nodejs和MongoDB并且做了一个应该算是最简单的前后...

    PumpkinDylan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<