摘要:前言筆者的前端開發(fā)已經(jīng)有些時日了,對于一直保留著最初的恐懼,倘若一座不可跨越的高山,思前想后終于邁出最后一步,踏入了開拓自己視野的新視界,希望在看這篇文章的你可以一起跟我動手嘗試。面向的下一代框架。由團隊打造,特點優(yōu)雅簡潔靈活體積小。
前言
?????筆者的前端開發(fā)已經(jīng)有些時日了,對于node一直保留著最初的恐懼,倘若一座不可跨越的高山,思前想后終于邁出最后一步,踏入了開拓自己視野的新視界,希望在看這篇文章的你可以一起跟我動手嘗試。
?????如果你是個急性子,我就提供一波傳送門 github:https://github.com/tenggouwa/...
?????你可以先star,再拉代碼,慢慢的看這篇文章。
next generation web framework for node.js
面向node.js的下一代web框架。
由Express團隊打造,特點:優(yōu)雅、簡潔、靈活、體積小。幾乎所有功能都需要通過中間件實現(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ù)庫可視化--免費): https://robomongo.org/download
本地安裝nodemon
nodemon會監(jiān)聽你的代碼,當有變動的時候自動幫你重啟項目(好東西)
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
在編輯器中打開app.js并輸入以下代碼
const Koa = require("koa"); const app = new Koa(); app.use(async ctx => { // ctx.body 即服務端響應的數(shù)據(jù) await ctx.body = "Hello world!!!"; }) // 監(jiān)聽端口、啟動程序 app.listen(3000, err => { if (err) throw err; console.log("runing at 3000"); })
啟動app.js
node app 或 nodemon 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 以查看內(nèi)容 ctx.response.body = "HOME page index
" }, }
運行代碼 node app 或 nodemon app
本地訪問localhost:3000/index
got it!!!!
處理postkoa-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 以查看內(nèi)容 },
使用postman創(chuàng)建post請求,訪問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())
至此,我們就擁有了一套簡單的koa項目,可以進行前后臺交互,或者mock數(shù)據(jù)搭建mongodb
在環(huán)境搭建中可以看到安裝mongodb以及數(shù)據(jù)庫可視化的方法
在項目中yarn add mongoose -S
創(chuàng)建models文件夾并在app.js添加如下代碼
const mongoose = require("mongoose") const path = require("path") const fs = require("fs") // 鏈接數(shù)據(jù)庫一定放在koa前面 mongoose.Promise = require("bluebird") mongoose.connect("mongodb://127.0.0.1/tenggouwa",{useNewUrlParser: true}) // 獲取數(shù)據(jù)庫表對應的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里創(chuàng)建block.js并加入如下代碼
"use strict" var mongoose = require("mongoose") var Schema = mongoose.Schema; /** * 定義一個模式(相當于傳統(tǒng)意義的表結構) * 每個模式映射mongoDB的一個集合, * 它定義(只是定義,不是實現(xiàn))這個集合里面文檔的結構,就是定義這個文檔有什么字段,字段類型是什么,字段默認值是什么等。 * 除了定義結構外,還定義文檔的實例方法,靜態(tài)模型方法,復合索引,中間件等
*/ var BlockSchema = new Schema({ peers: String, blocks: String, createAt: { type: Date, default: Date.now() }, updateAt: { type: Date, dafault: Date.now() } }) /** * 定義模型 * 模型用來實現(xiàn)我們定義的模式,調(diào)用mongoose.model來編譯Schema得到Model * @type {[type]} */ // 參數(shù)User 數(shù)據(jù)庫中的集合名稱, 不存在會創(chuàng)建. // console.log(BlockSchema) var Block = mongoose.model("Block", BlockSchema) module.exports = Block ```
這一步是為了添加傳統(tǒng)意義上的表結構,并放到Block表里面
接下來我們就可以在controller里面去操縱mongodb,進行業(yè)務操作了。例如:
delBlock: async(ctx, next) => { const params = ctx.request.body // 拿到返回的參數(shù) const result = await Block.where({ // 通過id去Block里面查找對應數(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()
分頁
find().sort().skip(頁碼).limit(單頁數(shù)據(jù))
got it!!!
Just Do It 寫在最后當你看完這篇文章,你已經(jīng)明白基本的koa+mongdb的用法了,希望你可以通過學習node以及其生態(tài),提升自己的知識儲備
跟筆者一起加油!
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/105059.html
摘要:最近利用空閑時間寫了一個從入門到上線的的實戰(zhàn)教程從入門到上線目前還在更新中,入門篇已基本成型。本項目使用語法,采用搭建了一個博客系統(tǒng),實現(xiàn)了文章管理用戶登錄注冊權限控制分類管理等功能。實現(xiàn)線上部署左手代碼右手磚拋磚引玉 最近利用空閑時間寫了一個從入門到上線的的node實戰(zhàn)教程《Node.js從入門到上線》A blog build with Koa2. 目前還在更新中,入門篇已基本成型。...
摘要:可以發(fā)現(xiàn),整個同步過程是依賴于來進行的。不考慮導致的問題,正常的應用升級也會導致應用中斷運行。注意事項為了避免被回滾的更新被發(fā)布出去,選擇只在一個變更到達大多數(shù)節(jié)點不可能被回滾時,才會將這些變更發(fā)布到應用。 Change Stream是MongoDB從3.6開始支持的新特性。這個新特性有哪些奇妙之處,會給我們帶來什么便利?本次的文章將就這個主題進行初步討論。 Change Stream...
摘要:原文來源全棧初體驗前言據(jù)說現(xiàn)在不會點后臺的前端都找不到工作了嚇得我這幾天看起了和并且做了一個應該算是最簡單的前后端例子,如圖輸入賬戶密碼,提交表單,保存信息到數(shù)據(jù)庫再重定向到頁面獲取數(shù)據(jù)庫中的信息,渲染在瀏覽器上具體代碼主要技術前端模板后臺 原文來源: 全棧初體驗 前言 據(jù)說現(xiàn)在不會點后臺的前端都找不到工作了嚇得我這幾天看起了Nodejs和MongoDB并且做了一個應該算是最簡單的前后...
摘要:原文來源全棧初體驗前言據(jù)說現(xiàn)在不會點后臺的前端都找不到工作了嚇得我這幾天看起了和并且做了一個應該算是最簡單的前后端例子,如圖輸入賬戶密碼,提交表單,保存信息到數(shù)據(jù)庫再重定向到頁面獲取數(shù)據(jù)庫中的信息,渲染在瀏覽器上具體代碼主要技術前端模板后臺 原文來源: 全棧初體驗 前言 據(jù)說現(xiàn)在不會點后臺的前端都找不到工作了嚇得我這幾天看起了Nodejs和MongoDB并且做了一個應該算是最簡單的前后...
摘要:原文來源全棧初體驗前言據(jù)說現(xiàn)在不會點后臺的前端都找不到工作了嚇得我這幾天看起了和并且做了一個應該算是最簡單的前后端例子,如圖輸入賬戶密碼,提交表單,保存信息到數(shù)據(jù)庫再重定向到頁面獲取數(shù)據(jù)庫中的信息,渲染在瀏覽器上具體代碼主要技術前端模板后臺 原文來源: 全棧初體驗 前言 據(jù)說現(xiàn)在不會點后臺的前端都找不到工作了嚇得我這幾天看起了Nodejs和MongoDB并且做了一個應該算是最簡單的前后...
閱讀 1643·2021-09-22 15:21
閱讀 2861·2021-09-09 09:32
閱讀 2681·2021-09-02 09:52
閱讀 3303·2019-08-30 14:02
閱讀 2218·2019-08-26 13:25
閱讀 1447·2019-08-26 13:24
閱讀 1599·2019-08-26 10:31
閱讀 1553·2019-08-26 10:16