成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

適合初學(xué)者的koa2+mongodb初體驗(yàn)

Jacendfeng / 559人閱讀

摘要:前言筆者的前端開(kāi)發(fā)已經(jīng)有些時(shí)日了,對(duì)于一直保留著最初的恐懼,倘若一座不可跨越的高山,思前想后終于邁出最后一步,踏入了開(kāi)拓自己視野的新視界,希望在看這篇文章的你可以一起跟我動(dòng)手嘗試。面向的下一代框架。由團(tuán)隊(duì)打造,特點(diǎn)優(yōu)雅簡(jiǎn)潔靈活體積小。

前言

?????筆者的前端開(kāi)發(fā)已經(jīng)有些時(shí)日了,對(duì)于node一直保留著最初的恐懼,倘若一座不可跨越的高山,思前想后終于邁出最后一步,踏入了開(kāi)拓自己視野的新視界,希望在看這篇文章的你可以一起跟我動(dòng)手嘗試。

?????如果你是個(gè)急性子,我就提供一波傳送門 github:https://github.com/tenggouwa/...

?????你可以先star,再拉代碼,慢慢的看這篇文章。

KOA
next generation web framework for node.js

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

由Express團(tuán)隊(duì)打造,特點(diǎn):優(yōu)雅、簡(jiǎn)潔、靈活、體積小。幾乎所有功能都需要通過(guò)中間件實(shí)現(xiàn)。

環(huán)境搭建

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數(shù)據(jù)庫(kù)可視化--免費(fèi)): https://robomongo.org/download

本地安裝nodemon

nodemon會(huì)監(jiān)聽(tīng)你的代碼,當(dāng)有變動(dòng)的時(shí)候自動(dòng)幫你重啟項(xiàng)目(好東西)

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

yarn(選裝)---代替npm/cnpm

homebrew(選裝)---包版本管理工具

Hello World!!!

創(chuàng)建目錄

mkdir node-app && cd node-app

npm init

yarn add koa -S

touch app.js

在編輯器中打開(kāi)app.js并輸入以下代碼

const Koa = require("koa");
const app = new Koa();
    app.use(async ctx => {
    // ctx.body 即服務(wù)端響應(yīng)的數(shù)據(jù)
    await ctx.body = "Hello world!!!";
})
// 監(jiān)聽(tīng)端口、啟動(dòng)程序
app.listen(3000, err => {
    if (err) throw err;
        console.log("runing at 3000");
    })

啟動(dòng)app.js

node appnodemon app

本地訪問(wèn)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 以查看內(nèi)容
        ctx.response.body = "

HOME page index

" }, }

運(yùn)行代碼 node appnodemon app

本地訪問(wèn)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 ) // 重點(diǎn)在"post"后面的bodyParser()

home.js添加代碼

post: async(ctx, next) => {
    console.log(ctx.request.body) // 輸出ctx 以查看內(nèi)容
},

使用postman創(chuàng)建post請(qǐng)求,訪問(wèn)localhost:3000/post, 并傳遞參數(shù),看終端返回內(nèi)容

got it!!!

處理跨域

koa2-cors安裝

yarn add koa2-cors -S

在app.js內(nèi)添加如下代碼

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

至此,我們就擁有了一套簡(jiǎn)單的koa項(xiàng)目,可以進(jìn)行前后臺(tái)交互,或者mock數(shù)據(jù)搭建
mongodb

在環(huán)境搭建中可以看到安裝mongodb以及數(shù)據(jù)庫(kù)可視化的方法

在項(xiàng)目中yarn add mongoose -S

創(chuàng)建models文件夾并在app.js添加如下代碼

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

// 鏈接數(shù)據(jù)庫(kù)一定放在koa前面
mongoose.Promise = require("bluebird")
mongoose.connect("mongodb://127.0.0.1/tenggouwa",{useNewUrlParser: true})
// 獲取數(shù)據(jù)庫(kù)表對(duì)應(yīng)的js對(duì)象所在的路徑
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)

這一步可以將項(xiàng)目與mongodb鏈接

在models里創(chuàng)建block.js并加入如下代碼

"use strict"
var mongoose = require("mongoose")
var Schema = mongoose.Schema;
/**
* 定義一個(gè)模式(相當(dāng)于傳統(tǒng)意義的表結(jié)構(gòu))
* 每個(gè)模式映射mongoDB的一個(gè)集合,
* 它定義(只是定義,不是實(shí)現(xiàn))這個(gè)集合里面文檔的結(jié)構(gòu),就是定義這個(gè)文檔有什么字段,字段類型是什么,字段默認(rèn)值是什么等。
* 除了定義結(jié)構(gòu)外,還定義文檔的實(shí)例方法,靜態(tài)模型方法,復(fù)合索引,中間件等

*/
var BlockSchema = new Schema({
    peers: String,
    blocks: String,
    createAt: {
        type: Date,
        default: Date.now()
    },
    updateAt: {
        type: Date,
        dafault: Date.now()
    }
})
/**
* 定義模型
* 模型用來(lái)實(shí)現(xiàn)我們定義的模式,調(diào)用mongoose.model來(lái)編譯Schema得到Model
* @type {[type]}
*/
// 參數(shù)User 數(shù)據(jù)庫(kù)中的集合名稱, 不存在會(huì)創(chuàng)建.
// console.log(BlockSchema)
var Block = mongoose.model("Block", BlockSchema)
module.exports = Block
```

這一步是為了添加傳統(tǒng)意義上的表結(jié)構(gòu),并放到Block表里面

接下來(lái)我們就可以在controller里面去操縱mongodb,進(jìn)行業(yè)務(wù)操作了。例如:

delBlock: async(ctx, next) => {
    const params = ctx.request.body // 拿到返回的參數(shù)
    const result = await Block.where({ // 通過(guò)id去Block里面查找對(duì)應(yīng)數(shù)據(jù)
        _id: params.id
    }).remove() // 將該條數(shù)據(jù)刪除
},

got it!!!

mongodb常用操作

保存數(shù)據(jù)

save()

查取數(shù)據(jù)

查詢 find() finOne()

where()

更改數(shù)據(jù)

where().update()

刪除數(shù)據(jù)

where().remove()

排序

find().sort()

分頁(yè)

find().sort().skip(頁(yè)碼).limit(單頁(yè)數(shù)據(jù))

got it!!!

Just Do It 寫(xiě)在最后

當(dāng)你看完這篇文章,你已經(jīng)明白基本的koa+mongdb的用法了,希望你可以通過(guò)學(xué)習(xí)node以及其生態(tài),提升自己的知識(shí)儲(chǔ)備
跟筆者一起加油!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/105059.html

相關(guān)文章

  • 《Node.js從入門到上線》入門篇 (持續(xù)更新中)

    摘要:最近利用空閑時(shí)間寫(xiě)了一個(gè)從入門到上線的的實(shí)戰(zhàn)教程從入門到上線目前還在更新中,入門篇已基本成型。本項(xiàng)目使用語(yǔ)法,采用搭建了一個(gè)博客系統(tǒng),實(shí)現(xiàn)了文章管理用戶登錄注冊(cè)權(quán)限控制分類管理等功能。實(shí)現(xiàn)線上部署左手代碼右手磚拋磚引玉 最近利用空閑時(shí)間寫(xiě)了一個(gè)從入門到上線的的node實(shí)戰(zhàn)教程《Node.js從入門到上線》A blog build with Koa2. 目前還在更新中,入門篇已基本成型。...

    CocoaChina 評(píng)論0 收藏0
  • MongoDB Change Stream體驗(yàn)

    摘要:可以發(fā)現(xiàn),整個(gè)同步過(guò)程是依賴于來(lái)進(jìn)行的。不考慮導(dǎo)致的問(wèn)題,正常的應(yīng)用升級(jí)也會(huì)導(dǎo)致應(yīng)用中斷運(yùn)行。注意事項(xiàng)為了避免被回滾的更新被發(fā)布出去,選擇只在一個(gè)變更到達(dá)大多數(shù)節(jié)點(diǎn)不可能被回滾時(shí),才會(huì)將這些變更發(fā)布到應(yīng)用。 Change Stream是MongoDB從3.6開(kāi)始支持的新特性。這個(gè)新特性有哪些奇妙之處,會(huì)給我們帶來(lái)什么便利?本次的文章將就這個(gè)主題進(jìn)行初步討論。 Change Stream...

    1fe1se 評(píng)論0 收藏0
  • 前端小白全棧體驗(yàn)

    摘要:原文來(lái)源全棧初體驗(yàn)前言據(jù)說(shuō)現(xiàn)在不會(huì)點(diǎn)后臺(tái)的前端都找不到工作了嚇得我這幾天看起了和并且做了一個(gè)應(yīng)該算是最簡(jiǎn)單的前后端例子,如圖輸入賬戶密碼,提交表單,保存信息到數(shù)據(jù)庫(kù)再重定向到頁(yè)面獲取數(shù)據(jù)庫(kù)中的信息,渲染在瀏覽器上具體代碼主要技術(shù)前端模板后臺(tái) 原文來(lái)源: 全棧初體驗(yàn) 前言 據(jù)說(shuō)現(xiàn)在不會(huì)點(diǎn)后臺(tái)的前端都找不到工作了嚇得我這幾天看起了Nodejs和MongoDB并且做了一個(gè)應(yīng)該算是最簡(jiǎn)單的前后...

    wangym 評(píng)論0 收藏0
  • 前端小白全棧體驗(yàn)

    摘要:原文來(lái)源全棧初體驗(yàn)前言據(jù)說(shuō)現(xiàn)在不會(huì)點(diǎn)后臺(tái)的前端都找不到工作了嚇得我這幾天看起了和并且做了一個(gè)應(yīng)該算是最簡(jiǎn)單的前后端例子,如圖輸入賬戶密碼,提交表單,保存信息到數(shù)據(jù)庫(kù)再重定向到頁(yè)面獲取數(shù)據(jù)庫(kù)中的信息,渲染在瀏覽器上具體代碼主要技術(shù)前端模板后臺(tái) 原文來(lái)源: 全棧初體驗(yàn) 前言 據(jù)說(shuō)現(xiàn)在不會(huì)點(diǎn)后臺(tái)的前端都找不到工作了嚇得我這幾天看起了Nodejs和MongoDB并且做了一個(gè)應(yīng)該算是最簡(jiǎn)單的前后...

    Jioby 評(píng)論0 收藏0
  • 前端小白全棧體驗(yàn)

    摘要:原文來(lái)源全棧初體驗(yàn)前言據(jù)說(shuō)現(xiàn)在不會(huì)點(diǎn)后臺(tái)的前端都找不到工作了嚇得我這幾天看起了和并且做了一個(gè)應(yīng)該算是最簡(jiǎn)單的前后端例子,如圖輸入賬戶密碼,提交表單,保存信息到數(shù)據(jù)庫(kù)再重定向到頁(yè)面獲取數(shù)據(jù)庫(kù)中的信息,渲染在瀏覽器上具體代碼主要技術(shù)前端模板后臺(tái) 原文來(lái)源: 全棧初體驗(yàn) 前言 據(jù)說(shuō)現(xiàn)在不會(huì)點(diǎn)后臺(tái)的前端都找不到工作了嚇得我這幾天看起了Nodejs和MongoDB并且做了一個(gè)應(yīng)該算是最簡(jiǎn)單的前后...

    PumpkinDylan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<