摘要:前言筆者的前端開(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,再拉代碼,慢慢的看這篇文章。
next generation web framework for node.js
面向node.js的下一代web框架。
由Express團(tuán)隊(duì)打造,特點(diǎn):優(yōu)雅、簡(jiǎn)潔、靈活、體積小。幾乎所有功能都需要通過(guò)中間件實(shí)現(xià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 app 或 nodemon 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 app 或 nodemon app
本地訪問(wèn)localhost:3000/index
got it!!!!
處理postkoa-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
摘要:最近利用空閑時(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. 目前還在更新中,入門篇已基本成型。...
摘要:可以發(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...
摘要:原文來(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)單的前后...
摘要:原文來(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)單的前后...
摘要:原文來(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)單的前后...
閱讀 1656·2021-09-22 15:21
閱讀 2874·2021-09-09 09:32
閱讀 2705·2021-09-02 09:52
閱讀 3317·2019-08-30 14:02
閱讀 2232·2019-08-26 13:25
閱讀 1464·2019-08-26 13:24
閱讀 1613·2019-08-26 10:31
閱讀 1566·2019-08-26 10:16