node.js搭建服務端項目

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

安裝node

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

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

Express框架

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

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

安裝

第一步:安裝express

npm install express --save -g

第二步:安裝express-generator

npm install express-generator --save -g //express-generator是express應用生成器化借,相當于express 的骨架

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

express expressDemo //你要建立的項目名稱

第四步:安裝:npm install
第五步:啟動項目:npm start
這樣你的第一個express項目就創(chuàng)建成功了

express-路由

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

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");

上面代碼的關鍵是http模塊的createServer方法蓖康,表示生成一個HTTP服務器實例勘纯。該方法接受一個回調(diào)函數(shù),該回調(diào)函數(shù)的參數(shù)钓瞭,分別為代表HTTP請求和HTTP回應的request對象和response對象驳遵。

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

var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('Hello world!');
});

app.listen(3000);

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

中間件

簡單說熟菲,中間件(middleware)就是處理HTTP請求的函數(shù)看政。它最大的特點就是,一個中間件處理完抄罕,再傳遞給下一個中間件允蚣。App實例在運行過程中,會調(diào)用一系列的中間件呆贿。

每個中間件可以從App實例嚷兔,接收三個參數(shù)森渐,依次為request對象(代表HTTP請求)、response對象(代表HTTP回應)冒晰,next回調(diào)函數(shù)(代表下一個中間件)同衣。每個中間件都可以對HTTP請求(request對象)進行加工,并且決定是否調(diào)用next方法壶运,將request對象再傳給下一個中間件乳怎。
Express 應用程序基本上是一系列中間件函數(shù)調(diào)用。
中間件函數(shù)可以執(zhí)行以下任務:

  • 執(zhí)行任何代碼前弯。
  • 對請求和響應對象進行更改蚪缀。
  • 結束請求/響應循環(huán)。
  • 調(diào)用堆棧中的下一個中間件函數(shù)恕出。

Express 應用程序可以使用以下類型的中間件:

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

應用層中間件
使用 app.use()app.METHOD() 函數(shù)將應用層中間件綁定到應用程序對象的實例询枚,其中 METHOD 是中間件函數(shù)處理的請求的小寫 HTTP 方法(例如 GET、PUT 或 POST)浙巫。

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

app.get('/user/:id', function (req, res, next) {
  res.send('USER');
});

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

var router = express.Router();

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

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

有關錯誤處理中間件的詳細信息丧裁,請參閱:錯誤處理护桦。

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

第三方中間件
使用第三方中間件向 Express 應用程序添加功能催享。
安裝具有所需功能的 Node.js 模塊,然后在應用層或路由器層的應用程序中將其加裝入哟绊。
列如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 是一個基于分布式文件存儲的數(shù)據(jù)庫。由 C++ 語言編寫票髓。旨在為 WEB 應用提供可擴展的高性能數(shù)據(jù)存儲解決方案攀涵。
MongoDB 是一個介于關系數(shù)據(jù)庫和非關系數(shù)據(jù)庫之間的產(chǎn)品,是非關系數(shù)據(jù)庫當中功能最豐富炬称,最像關系數(shù)據(jù)庫的汁果。

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

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

echo $PATH 

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


image.png

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

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

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

sudo mkdir -p /data/db

4,啟動 mongodb,默認數(shù)據(jù)庫目錄即為 /data/db:

sudo mongod

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

mongo

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

mongoose

mongoose是nodeJS提供連接 mongodb的一個庫. 此外還有mongoskin, mongodb(mongodb官方出品). 本人,還是比較青睞mongoose的, 因為他遵循的是一種, 模板式方法, 能夠對你輸入的數(shù)據(jù)進行自動處理. 有興趣的同學可以去Mongoose官網(wǎng)看看.
安裝mongoose

npm install mongoose --save

Mongoose里面有幾個基本概念.

  • Schema: 相當于一個數(shù)據(jù)庫的模板. Model可以通過mongoose.model 集成其基本屬性內(nèi)容. 當然也可以選擇不繼承.
  • Model: 基本文檔數(shù)據(jù)的父類,通過集成Schema定義的基本方法和屬性得到相關的內(nèi)容.
  • instance: 這就是實實在在的數(shù)據(jù)了. 通過 new Model()初始化得到.
    在保證你已經(jīng)啟動連接上了mongoDB時你就可以使用了棘利,列如以下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',()=>{
    //定義一個schema
    let Schema = mongoose.Schema({
        category:String,
        name:String
    });
    Schema.methods.eat = function(){
        console.log("I've eatten one "+this.name);
    }
    //繼承一個schema
    let Model = mongoose.model("fruit",Schema);
    //生成一個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){

})

//按條件查詢單個數(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){

})
})

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

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市朽缴,隨后出現(xiàn)的幾起案子善玫,更是在濱河造成了極大的恐慌,老刑警劉巖密强,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茅郎,死亡現(xiàn)場離奇詭異,居然都是意外死亡或渤,警方通過查閱死者的電腦和手機系冗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來薪鹦,“玉大人掌敬,你說我怎么就攤上這事〕卮牛” “怎么了奔害?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長地熄。 經(jīng)常有香客問我华临,道長,這世上最難降的妖魔是什么端考? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任银舱,我火速辦了婚禮,結果婚禮上跛梗,老公的妹妹穿的比我還像新娘寻馏。我一直安慰自己,他們只是感情好核偿,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布诚欠。 她就那樣靜靜地躺著,像睡著了一般漾岳。 火紅的嫁衣襯著肌膚如雪轰绵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天尼荆,我揣著相機與錄音左腔,去河邊找鬼。 笑死捅儒,一個胖子當著我的面吹牛液样,可吹牛的內(nèi)容都是我干的振亮。 我是一名探鬼主播,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼鞭莽,長吁一口氣:“原來是場噩夢啊……” “哼坊秸!你這毒婦竟也來了?” 一聲冷哼從身側響起澎怒,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤褒搔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后喷面,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體星瘾,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年惧辈,在試婚紗的時候發(fā)現(xiàn)自己被綠了琳状。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡咬像,死狀恐怖算撮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情县昂,我是刑警寧澤肮柜,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站倒彰,受9級特大地震影響审洞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜待讳,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一芒澜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧创淡,春花似錦痴晦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至露乏,卻和暖如春碧浊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留躏尉,地道東北人。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓驹止,卻偏偏與公主長得像浩聋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子幢哨,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350