nodejs+express+express-handlbars+mongoose

npm在package.json文件中管理項(xiàng)目的依賴(lài)項(xiàng)以及項(xiàng)目的元數(shù)據(jù)。要?jiǎng)?chuàng)建這個(gè)文件,最簡(jiǎn)單的辦法是運(yùn)行npm init:它會(huì)問(wèn)一系列的問(wèn)題,然后為你生成一個(gè)package.json文件幫你起步滋觉,如下圖

安裝express:

npm install --save express

(--save用于更新package.json)

因?yàn)閚ode_modules隨時(shí)都可以用npm重新生成,所以我們不會(huì)把這個(gè)目錄保存在我們的代碼庫(kù)中


創(chuàng)建一個(gè).gitignore文件:

# ignore packages installed by npm

node_modules

# put any other files you don't want to check in here,

# such as .DS_Store (OSX), *.bak, etc.


創(chuàng)建配置文件config.js:



創(chuàng)建入口文件server.js:

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

//配置文件

var config = require('./config.js');

//禁用Express的X-Powered-By頭信息

app.disable('x-powered-by');

//添加通用中間件

//請(qǐng)求體中間件

app.use(require('body-parser')());

//靜態(tài)資源目錄(存放css、js、圖片文件等靜態(tài)資源)

app.use(express.static(__dirname +'/public'));

//設(shè)置端口號(hào)(如果配置了環(huán)境端口,會(huì)優(yōu)先選擇)

app.set('port', process.env.PORT || config.port);

//視圖模版設(shè)置

var handlebars=require('express-handlebars').create({

defaultLayout:'main',//默認(rèn)公共模版

extname:'.hbs',//文件后綴名

helpers:require('./helper.js').helpers()//輔助函數(shù)

});

app.engine('hbs',handlebars.engine);

app.set('view engine','html');

//監(jiān)聽(tīng)端口

app.listen(app.get('port'),function(){

console.log('Express started on http://localhost:'+app.get('port') +'; press Ctrl-C to terminate.');

});

//如果需要使用子域名荠呐,可以使用vhost(npm install --save vhost)

//創(chuàng)建子域名"admin"......它應(yīng)該出現(xiàn)在所有其他路由之前varadmin = express.Router();

app.use(vhost('admin.*', admin));

//創(chuàng)建admin的路由;它們可以在任何地方定義admin.get('/',function(req, res){

res.render('admin/home');

});

admin.get('/users',function(req, res){

res.render('admin/users');

});

//路由分組

require('./routers.js')(app);

// 定制404頁(yè)面

app.use(function(req, res){

res.type('text/plain');

res.status(404);

res.send('404 - Not Found'+config.name);

});

// 定制500頁(yè)面

app.use(function(err, req, res, next){

console.error(err.stack);

res.type('text/plain');

res.status(500);

res.send('500 - Server Error');

});


創(chuàng)建路由分組文件routers.js:

默認(rèn)忽略了大小寫(xiě)或反斜杠,并且在進(jìn)行匹配時(shí)也不考慮查詢(xún)字符串

//引入控制器

var home = require('./controllers/home.js');

var about = require('./controllers/about.js');

//提供接口

module.exports = function(app){

//home

app.get('/',home.home);

//about

app.get('/about',about.about)

//帶參數(shù)的路由

app.get('/abou/:city/:name',about.city);

//正則表達(dá)式路由

1.用同一個(gè)路由處理/和/home

app.get('/(home)?, home.home');

2.完整的正則表達(dá)式

app.get(/crazy|mad(ness)?|lunacy/,function(req,res){});

//因?yàn)槁酚傻谋举|(zhì)也是中間件邓厕,所以還可以這樣寫(xiě)

app.get('/about',function(req,res,next){

if (...) return next();//走向下一個(gè)中間件炫惩,這里就是about.about

return res.send('...');//結(jié)束返回昔园,不會(huì)向下走蔓榄,render,json一樣

}, about.about);

}


創(chuàng)建控制器文件home.js蒿赢、about.js:

exports.home = function(req,res,next){

res.render('home', {

title: '主頁(yè)',//傳遞參數(shù)

layout:null,//不使用默認(rèn)模版

//還可以重寫(xiě)輔助方法...

})

}

exports.about = function(req,res,next){...}


創(chuàng)建數(shù)據(jù)庫(kù)主文件db.js:

npm install --save mongoose

var mongoose=require('mongoose');

var config=require('../config.js');

//連接數(shù)據(jù)庫(kù)

mongoose.connect(config.db,{server: {poolSize:20, socketOptions:{keepAlive:1}}},function(err) {if(err) {process.exit(1);}});

require('./admin/coal');

exports.Coal=mongoose.model('Coal');//導(dǎo)出模型

...

//如果使用云托管润樱,MongoLab:https://npmjs.org/package/mongodb

然后將數(shù)據(jù)庫(kù)憑證添加到config.js文件里:

mongo: {

development: {connectionString: 'your_dev_connection_string',},

production: {connectionString: 'your_production_connection_string',},

}

//連接

var opts = {server: {socketOptions: { keepAlive: 1 }}};

switch(app.get('env')){

case 'development':

mongoose.connect(credentials.mongo.development.connectionString, opts);break;

case 'production':

mongoose.connect(credentials.mongo.production.connectionString, opts);break;

default:throw newError('Unknown execution environment: ' + app.get('env'));

}

創(chuàng)建模型文件:

var helper=require('../helper.js');//封裝數(shù)據(jù)庫(kù)公共方法

var mongoose=require('mongoose');

var CoalSchema=new mongoose.Schema({

supplier: String,

water: {type:String,default:'123'//默認(rèn)值}

});

CoalSchema.statics.getCoal=function(callback){this.find(callback);}

//導(dǎo)出

module.exports=mongoose.model('Coal',CoalSchema);


不寫(xiě)了渣触,太多了羡棵。。嗅钻。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末皂冰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子养篓,更是在濱河造成了極大的恐慌秃流,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柳弄,死亡現(xiàn)場(chǎng)離奇詭異舶胀,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)碧注,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)嚣伐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人萍丐,你說(shuō)我怎么就攤上這事轩端。” “怎么了逝变?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵基茵,是天一觀(guān)的道長(zhǎng)奋构。 經(jīng)常有香客問(wèn)我,道長(zhǎng)拱层,這世上最難降的妖魔是什么弥臼? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮根灯,結(jié)果婚禮上醋火,老公的妹妹穿的比我還像新娘。我一直安慰自己箱吕,他們只是感情好芥驳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著茬高,像睡著了一般兆旬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上怎栽,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天丽猬,我揣著相機(jī)與錄音,去河邊找鬼熏瞄。 笑死脚祟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的强饮。 我是一名探鬼主播由桌,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼邮丰!你這毒婦竟也來(lái)了行您?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤剪廉,失蹤者是張志新(化名)和其女友劉穎娃循,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體斗蒋,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捌斧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泉沾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捞蚂。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖爆哑,靈堂內(nèi)的尸體忽然破棺而出洞难,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布队贱,位于F島的核電站色冀,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏柱嫌。R本人自食惡果不足惜锋恬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望编丘。 院中可真熱鬧与学,春花似錦、人聲如沸嘉抓。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)抑片。三九已至卵佛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間敞斋,已是汗流浹背截汪。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留植捎,地道東北人衙解。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像焰枢,于是被迫代替她去往敵國(guó)和親蚓峦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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