Express新建的microblog項目結構javascript
1.app.js:項目入口及程序啓動文件。 引入模塊依賴, 模板引擎, 數據庫引用等入口文件css
2.package.json:存儲着工程的信息及模塊依賴,當在 dependencies 中添加依賴的模塊時java
3.node_modules:用來存放項目的依賴庫, 存放安裝的模塊,當你在 package.json 添加依賴的模塊並安裝後,存放在這個文件夾下node
4.public:存放用來存放靜態文件( image、css、js)等文件 mongodb
5.routes:路由控制器。數據庫
6.views:存放視圖文件或者說模版文件 (MVC中的V), 至關於HTML頁面express
7.bin:項目的啓動文件,存放可執行文件 json
8.models:數據模型(至關於MVC中的M)。緩存
app.js 的配置說明cookie
/* * @模塊依賴 */ var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser');// 第三方中間件解析cookie, 能夠在應用級加載, 也能夠在路由級加載 var bodyParser = require('body-parser'); var partials = require('express-partials'); var session = require('express-session'); var MongoStore = require('connect-mongo')(session); var settings = require('./settings'); var flash = require('connect-flash'); /*設置路由*/ var index = require('./routes/index'); var users = require('./routes/users'); var app = express(); /* * @view engine setup 視圖引擎設置 * @views 放模板文件的目錄 * @view engine 模板引擎 */ app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.use(partials()); /* * @加載環境變量 */ // uncomment after placing your favicon in /public // app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); // express.static 是express惟一內置的中間件, 基於serve-static, 負責在Express應用中提託管靜態資源,每一個應用可有多個靜態目錄 app.use(express.static(path.join(__dirname, 'public'))); app.use(flash()); // 數據庫引用 app.use(session({ secret: settings.cookieSecret, store: new MongoStore({ // db: settings.db, url: 'mongodb://localhost/microblog', autoRemove: 'native' }) })); app.use(function(req, res, next){ // console.log("app.usr local"); res.locals.user = req.session.user; res.locals.post = req.session.post; var error = req.flash('error'); res.locals.error = error.length ? error : null; var success = req.flash('success'); res.locals.success = success.length ? success : null; next(); }); /* * @加載路由 */ app.use('/', index); app.use('/users', users); /* * @錯誤處理解決辦法 */ // catch 404 and forward to error handler // 這是一個沒有掛載路徑的"常規404中間件", 應用的每一個請求都會執行該中間件 app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); // error handler // 這是一個沒有掛載路徑的"錯誤處理中間件", 應用的每一個請求都會執行該中間件 /* * 必須使用4個參數, 即便不須要next對象, 也必須聲明它, 不然中間件會被識別爲一個常規則中間件, 不能處理錯誤 */ app.use(function(err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page res.status(err.status || 500); res.render('error'); }); /* * @導出app對象 */ module.exports = app;
1.require() 用於在當前模塊中加載和使用其餘模塊;此方法是模塊的基礎,使用中大概有路徑的概念就行。PS:JS文件能夠去掉".js"後綴
var express = require('express'); // js文件能夠去除後綴.js var index = require('./routes/index');
2.express() 表示建立express應用程序
var app = express();
3.app.set(key, value) 是 Express 的參數設置工具,接受一個鍵(key)和一個值(value),可用的參數以下所示。
/* * @view engine setup 視圖引擎設置 * @views 放模板文件的目錄 * @view engine 模板引擎 */ app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs');
4.app.use(path,callback) 加載執行, 使用中間件 function,可選參數path默認爲"/"。使用 app.use() 「定義的」中間件的順序很是重要,它們將會順序執行,use的前後順序決定了中間件的優先級(常常有搞錯順序的時候);
/* * @加載路由 */ app.use('/', index); app.use('/users', users); // 數據庫引用 app.use(session({ secret: settings.cookieSecret, store: new MongoStore({ // db: settings.db, url: 'mongodb://localhost/microblog', autoRemove: 'native' }) }));
5.app.render(view, [options], callback) 渲染 view, callback 用來處理返回的渲染後的字符串。
// 首頁 router.get("/",function(req,res) { res.render("reg",{ title : "首頁" }); });
6.app.listen() 給定的主機和端口上監聽請求
app.listen('8808');
7.next函數主要負責將控制權交給下一個中間件,若是當前中間件沒有終結請求,而且next沒有被調用,那麼請求將被掛起,後邊定義的中間件將得不到被執行的機會。
/* * @錯誤處理解決辦法 */ // catch 404 and forward to error handler // 這是一個沒有掛載路徑的"常規404中間件", 應用的每一個請求都會執行該中間件 app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); });