一個簡單的Node應(yīng)用的開發(fā)歷程

最近終于有時間?靜下心來學(xué)學(xué)node相關(guān)的知識了,那么來做一個什么東西呢隔嫡?想來想去還是來做一個簡單的bolg吧~~甸怕。接下來就介紹一下具體的歷程。

技術(shù)棧

  • node
  • express(web應(yīng)用框架)
  • mongoose(數(shù)據(jù)庫)
  • pm2(應(yīng)用進程管理)
  • swagger(API功能調(diào)試)

項目介紹

本文章將用具體的項來介紹 node-app:https://github.com/Hancoson/node-app

文件結(jié)構(gòu)

  • app.js:入口文件
  • package.json:工程信息及包管理
  • node_moudules:依賴模塊
  • public:靜態(tài)資源(css畔勤、js蕾各、images)
  • routes:路由管理
  • view:模版文件
  • models:數(shù)據(jù)模型
  • config:項目配置文件
  • app:存放?控制器、公用方法等
  • bin:項目配置腳本

MVC模式

  • Model
    • node提供的模塊庆揪,中間件式曲,在用express創(chuàng)建項目時,產(chǎn)生node_modules即表示M
    • 模塊如ejsmongoose吝羞,morgan兰伤,body-parser等等
  • View
    • express生成項目時會產(chǎn)生views,即前端
  • Controller
    • 即視圖向控制器發(fā)出請求,由控制器選擇相應(yīng)的模型來處理
    • 模型返回的結(jié)果給控制器钧排,由控制器來選擇合適的視圖,生成界面給用戶
    • 如通過res.render來渲染ejs文件

路由

  • 意義 : 訪問主頁時調(diào)用ejs模板引擎渲染index.ejs文件
  • 實現(xiàn)方法 :
    • app.js中寫入require('./routes/index')(app)即可引入?;
    • 路由中在引入對應(yīng)的Controller來實現(xiàn)具體數(shù)據(jù)的展示app.get('/articles/:id', articles.getArticle);

Controller

主要來處理業(yè)務(wù)邏輯敦腔,也就是說數(shù)據(jù)該怎么展示由他來管理,具體實現(xiàn)如下:

function (req, res) {
  blogdbs.find({
    _id: req.params.id //查詢條件
  }, function (err, data) {
    if (err) {
      //err
    } else {
      res.render('articles', {
        ... //數(shù)據(jù)對象
      });

    }
  })
}

Model

Model前先說說Schema恨溜,那么Schema是什么呢符衔?它類似于關(guān)系數(shù)據(jù)庫的表結(jié)構(gòu)。具體實現(xiàn)如下:

var mongoose = require('mongoose');
var schema = mongoose.Schema;
var _blogSchema = new Schema({
  title: {
    type: 'String'
  },
  ...
});

接下來就可以創(chuàng)建Model了糟袁,格式是mongoose.model(modelName, schema);

Schema后為什么還要有Model呢判族?

Mongoose的設(shè)計理念中,Schema用來也只定義數(shù)據(jù)結(jié)構(gòu)项戴,具體對數(shù)據(jù)的增刪改查操作都由Model來執(zhí)行形帮。

就好比富士康用模具組裝出一臺手機后,當(dāng)需要打電話時是用手機來打而不是用模具周叮。

遇到的問題

  • node開發(fā)過程中需要?頻繁的重啟項目辩撑,后來學(xué)習(xí)解了pm2來管理進程,并可監(jiān)控node服務(wù)端的更新仿耽,不用再重啟服務(wù)了合冀,開發(fā)效率大大提高。

  • 在服務(wù)端異步提交數(shù)據(jù)時候氓仲,app.js中需要加入以下代碼水慨,并且需要在路由引入的上方。

    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({extended: false}));
    
  • app.get()敬扛,app.use()app.all()

    • app.use(path,callback)中的callback既可以是router對象又可以是函數(shù)
    • app.get(path,callback)中的callback只能是函數(shù),可以將 app.get() 看做 app.use() 的請求 get 方式的簡要寫法朝抖。
    • app.all() 附加到應(yīng)用程序的路由啥箭,所以使用 app.router 中間件負責(zé)處理所有的路由請求,如:GET治宣、POST等急侥;
    var express = require('express');
    var app = express();
    app.get('/hello',function(req,res,next){
      res.send('hello test2');
    });
    
    //等同于:
    var express = require('express');
    var app = express();
    var router = express.Router();
    router.get('/', function(req, res, next) {
      res.send('hello world!');
    });
    app.use('/hello',router);
    
    

    如果您覺得閱讀本文對您有幫助,請“Star”侮邀,您的“Star”將是我最大的寫作動力坏怪!

    項目地址:node-app

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市绊茧,隨后出現(xiàn)的幾起案子铝宵,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹏秋,死亡現(xiàn)場離奇詭異尊蚁,居然都是意外死亡,警方通過查閱死者的電腦和手機侣夷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門横朋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人百拓,你說我怎么就攤上這事琴锭。” “怎么了衙传?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵祠够,是天一觀的道長。 經(jīng)常有香客問我粪牲,道長古瓤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任腺阳,我火速辦了婚禮落君,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亭引。我一直安慰自己绎速,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布焙蚓。 她就那樣靜靜地躺著纹冤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪购公。 梳的紋絲不亂的頭發(fā)上萌京,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音宏浩,去河邊找鬼知残。 笑死,一個胖子當(dāng)著我的面吹牛比庄,可吹牛的內(nèi)容都是我干的求妹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼佳窑,長吁一口氣:“原來是場噩夢啊……” “哼制恍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起神凑,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤净神,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體强挫,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡岔霸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了俯渤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呆细。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖八匠,靈堂內(nèi)的尸體忽然破棺而出絮爷,到底是詐尸還是另有隱情,我是刑警寧澤梨树,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布坑夯,位于F島的核電站,受9級特大地震影響抡四,放射性物質(zhì)發(fā)生泄漏柜蜈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一指巡、第九天 我趴在偏房一處隱蔽的房頂上張望淑履。 院中可真熱鬧,春花似錦藻雪、人聲如沸秘噪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽指煎。三九已至,卻和暖如春便斥,著一層夾襖步出監(jiān)牢的瞬間至壤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工椭住, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留崇渗,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓京郑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親葫掉。 傳聞我的和親對象是個殘疾皇子些举,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容