node.js搭建服務(wù)端項(xiàng)目

2021-6-4    前端達(dá)人



Node.js 是一個(gè)基于 Chrome V8 引擎 的 JavaScript 運(yùn)行時(shí)(即node.js不是一門語言也不是庫和框架,它是一個(gè)JavaScript運(yùn)行時(shí)環(huán)境)。 用于方便地搭建響應(yīng)速度快、易于擴(kuò)展的網(wǎng)絡(luò)應(yīng)用。Node.js使用事件驅(qū)動(dòng),非阻塞I/O 模型而得以輕量和高效,非常適合在分布式設(shè)備上運(yùn)行數(shù)據(jù)密集型的實(shí)時(shí)應(yīng)用。

安裝node

直接到官網(wǎng)上下載自己電腦的版本,官網(wǎng)地址:https://nodejs.org/zh-cn/
安裝完成之后可以通過在終端上運(yùn)行

 node -v //查看是否安裝成功,成功的話會(huì)展示當(dāng)前安裝版本 npm -v //安裝node的時(shí)會(huì)連同一起將npm安裝包一起打包安裝了,npm是nodejs的包管理器 npm install -g cnpm --registry=https://registry.npm.taobao.org //安裝淘寶鏡像可提高下載包工具的速度 

Express框架

Express 是一個(gè)簡(jiǎn)潔而靈活的 node.js Web應(yīng)用框架, 提供了一系列強(qiáng)大特性幫助你創(chuàng)建各種 Web 應(yīng)用,和豐富的 HTTP 工具。

使用 Express 可以快速地搭建一個(gè)完整功能的網(wǎng)站。express 是nodejs的一個(gè)web框架,使用express,能夠更便捷的使用nodejs.

安裝

第一步:安裝express

npm install express --save -g 

第二步:安裝express-generator

npm install express-generator --save -g //express-generator是express應(yīng)用生成器,相當(dāng)于express 的骨架 

第三步:打開終端進(jìn)入你將要建立項(xiàng)目的文件夾中創(chuàng)建你的項(xiàng)目

express expressDemo //你要建立的項(xiàng)目名稱 

第四步:安裝:npm install
第五步:?jiǎn)?dòng)項(xiàng)目:npm start
這樣你的第一個(gè)express項(xiàng)目就創(chuàng)建成功了

express-路由

Express框架建立在node.js內(nèi)置的http模塊上。http模塊生成服務(wù)器的原始代碼如下。

var http = require("http"); var app = http.createServer(function(request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); response.end("Hello world!"); }); app.listen(3000, "localhost"); 

上面代碼的關(guān)鍵是http模塊的createServer方法,表示生成一個(gè)HTTP服務(wù)器實(shí)例。該方法接受一個(gè)回調(diào)函數(shù),該回調(diào)函數(shù)的參數(shù),分別為代表HTTP請(qǐng)求和HTTP回應(yīng)的request對(duì)象和response對(duì)象。

Express框架的核心是對(duì)http模塊的再包裝。上面的代碼用Express改寫如下。

var express = require('express'); var app = express(); app.get('/', function (req, res) { res.send('Hello world!'); }); app.listen(3000); 

比較兩段代碼,可以看到它們非常接近。原來是用http.createServer方法新建一個(gè)app實(shí)例,現(xiàn)在則是用Express的構(gòu)造方法,生成一個(gè)Epress實(shí)例。兩者的回調(diào)函數(shù)都是相同的。Express框架等于在http模塊之上,加了一個(gè)中間層。

中間件

簡(jiǎn)單說,中間件(middleware)就是處理HTTP請(qǐng)求的函數(shù)。它最大的特點(diǎn)就是,一個(gè)中間件處理完,再傳遞給下一個(gè)中間件。App實(shí)例在運(yùn)行過程中,會(huì)調(diào)用一系列的中間件。

每個(gè)中間件可以從App實(shí)例,接收三個(gè)參數(shù),依次為request對(duì)象(代表HTTP請(qǐng)求)、response對(duì)象(代表HTTP回應(yīng)),next回調(diào)函數(shù)(代表下一個(gè)中間件)。每個(gè)中間件都可以對(duì)HTTP請(qǐng)求(request對(duì)象)進(jìn)行加工,并且決定是否調(diào)用next方法,將request對(duì)象再傳給下一個(gè)中間件。
Express 應(yīng)用程序基本上是一系列中間件函數(shù)調(diào)用。
中間件函數(shù)可以執(zhí)行以下任務(wù):

  • 執(zhí)行任何代碼。
  • 對(duì)請(qǐng)求和響應(yīng)對(duì)象進(jìn)行更改。
  • 結(jié)束請(qǐng)求/響應(yīng)循環(huán)。
  • 調(diào)用堆棧中的下一個(gè)中間件函數(shù)。

Express 應(yīng)用程序可以使用以下類型的中間件:

  • 應(yīng)用層中間件
  • 路由器層中間件
  • 錯(cuò)誤處理中間件
  • 內(nèi)置中間件
  • 第三方中間件

應(yīng)用層中間件
使用 app.use()app.METHOD() 函數(shù)將應(yīng)用層中間件綁定到應(yīng)用程序?qū)ο?/a>的實(shí)例,其中 METHOD 是中間件函數(shù)處理的請(qǐng)求的小寫 HTTP 方法(例如 GET、PUT 或 POST)。

app.use('/user/:id', function (req, res, next) { //在 /user/:id 路徑中為任何類型的 HTTP 請(qǐng)求執(zhí)行此函數(shù)。 console.log('Request Type:', req.method); next(); }); app.get('/user/:id', function (req, res, next) { res.send('USER'); }); 

路由器層中間件
路由器層中間件的工作方式與應(yīng)用層中間件基本相同,差異之處在于它綁定到 express.Router() 的實(shí)例。

var router = express.Router(); 

錯(cuò)誤處理中間件
錯(cuò)誤處理中間件函數(shù)的定義方式與其他中間件函數(shù)基本相同,差別在于錯(cuò)誤處理函數(shù)有四個(gè)自變量而不是三個(gè),專門具有特征符 (err, req, res, next):

app.use(function(err, req, res, next) { console.error(err.stack); res.status(500).send('Something broke!'); }); 

有關(guān)錯(cuò)誤處理中間件的詳細(xì)信息,請(qǐng)參閱:錯(cuò)誤處理

內(nèi)置中間件
自 V4.x 起,Express 不再依賴于 Connect。除 express.static 外,先前 Express 隨附的所有中間件函數(shù)現(xiàn)在以單獨(dú)模塊的形式提供。請(qǐng)查看中間件函數(shù)的列表。

第三方中間件
使用第三方中間件向 Express 應(yīng)用程序添加功能。
安裝具有所需功能的 Node.js 模塊,然后在應(yīng)用層或路由器層的應(yīng)用程序中將其加裝入。
列如cookie-parser中間件函數(shù)
首先安裝cookie-parser。 npm install cookie-parser

var express = require('express'); var app = express(); var cookieParser = require('cookie-parser'); // load the cookie-parsing middleware app.use(cookieParser()); 

MongoDB數(shù)據(jù)庫

MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫。由 C++ 語言編寫。旨在為 WEB 應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。
MongoDB 是一個(gè)介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。

你可以在mongodb官網(wǎng)下載該安裝包,地址為:https://www.mongodb.com/download-center#community。
以下以Mac版本為例講解

1,打開終端修改環(huán)境變量

echo $PATH 

你可以查看到你當(dāng)前的環(huán)境變量下面的文件


image.png

2,選擇其中一個(gè)文件夾進(jìn)去然后將你的mongodb的安裝包路徑映射到此文件上

ln -s 你的MongoDB的安裝包路徑/bin/mongo mongo 

3,你創(chuàng)建一個(gè)數(shù)據(jù)庫存儲(chǔ)目錄 /data/db:

sudo mkdir -p /data/db 

4,啟動(dòng) mongodb,默認(rèn)數(shù)據(jù)庫目錄即為 /data/db:

sudo mongod 

5,再打開一個(gè)終端執(zhí)行以下命令連接

mongo 

這樣你就啟動(dòng)連接上了本地的數(shù)據(jù)庫
你可以下載安裝mongosBooster數(shù)據(jù)庫管理你的數(shù)據(jù),地址為https://nosqlbooster.com/downloads

mongoose

mongoose是nodeJS提供連接 mongodb的一個(gè)庫. 此外還有mongoskin, mongodb(mongodb官方出品). 本人,還是比較青睞mongoose的, 因?yàn)樗裱氖且环N, 模板式方法, 能夠?qū)δ爿斎氲臄?shù)據(jù)進(jìn)行自動(dòng)處理. 有興趣的同學(xué)可以去Mongoose官網(wǎng)看看.
安裝mongoose

npm install mongoose --save 

Mongoose里面有幾個(gè)基本概念.

  • Schema: 相當(dāng)于一個(gè)數(shù)據(jù)庫的模板. Model可以通過mongoose.model 集成其基本屬性內(nèi)容. 當(dāng)然也可以選擇不繼承.
  • Model: 基本文檔數(shù)據(jù)的父類,通過集成Schema定義的基本方法和屬性得到相關(guān)的內(nèi)容.
  • instance: 這就是實(shí)實(shí)在在的數(shù)據(jù)了. 通過 new Model()初始化得到.
    在保證你已經(jīng)啟動(dòng)連接上了mongoDB時(shí)你就可以使用了,列如以下Demo
const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost:27017/test'); const con = mongoose.connection; con.on('error', console.error.bind(console, '連接數(shù)據(jù)庫失敗')); con.once('open',()=>{ //定義一個(gè)schema let Schema = mongoose.Schema({ category:String, name:String }); Schema.methods.eat = function(){ console.log("I've eatten one "+this.name); } //繼承一個(gè)schema let Model = mongoose.model("fruit",Schema); //生成一個(gè)document let people = new Model({ category:'apple', name:'apple' }); //存放數(shù)據(jù) people.save((err,apple)=>{ if(err) return console.log(err); apple.eat(); //查找數(shù)據(jù) Model.find({name:'apple'},(err,data)=>{ console.log(data); }) }); //查詢所有數(shù)據(jù) people.find(function(err,ret){ if(err){ console.log('查詢失敗') }else{ console.log('查詢成功') } }) //按條件查詢符合條件的數(shù)據(jù) people.find({},function(err,ret){ }) //按條件查詢單個(gè)數(shù)據(jù) people.findOne({},function(err,ret){ }) //刪除數(shù)據(jù) people.remove({uesername:'zhangsan'},function(err,ret){ }) //根據(jù)ID刪除數(shù)據(jù) peop.findByIdAndRemove({},function(err,ret){ }) //更新數(shù)據(jù) people.findByIdAndUpdate('dfsfs',function(err,ret){ }) }) 

到這里, 實(shí)際上, mongoose我們已經(jīng)就學(xué)會(huì)了. 剩下就是看一看官方文檔的API–CRUD相關(guān)操作



作者:orange_9706
來源:簡(jiǎn)書



藍(lán)藍(lán)設(shè)計(jì)建立了UI設(shè)計(jì)分享群,每天會(huì)分享國(guó)內(nèi)外的一些優(yōu)秀設(shè)計(jì),如果有興趣的話,可以進(jìn)入一起成長(zhǎng)學(xué)習(xí),請(qǐng)掃碼藍(lán)小助,報(bào)下信息,藍(lán)小助會(huì)請(qǐng)您入群。歡迎您加入噢~~希望得到建議咨詢、商務(wù)合作,也請(qǐng)與我們聯(lián)系。

截屏2021-05-13 上午11.41.03.png

  藍(lán)藍(lán)設(shè)計(jì)www.bouu.cn )是一家專注而深入的界面設(shè)計(jì)公司,為期望卓越的國(guó)內(nèi)外企業(yè)提供卓越的UI界面設(shè)計(jì)、BS界面設(shè)計(jì) 、 cs界面設(shè)計(jì) 、 ipad界面設(shè)計(jì) 、 包裝設(shè)計(jì) 、 圖標(biāo)定制 、 用戶體驗(yàn) 、交互設(shè)計(jì)、 網(wǎng)站建設(shè) 平面設(shè)計(jì)服務(wù)



分享本文至:

日歷

鏈接

個(gè)人資料

存檔