工程的結構文件

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),可用的參數以下所示。

  • views              :視圖文件的目錄,存放模板文件。
  • view engine    :視圖模板引擎。
  • view options   :全局視圖參數對象。
  • view cache     :啓用視圖緩存。
  • basepath        :基礎地址,一般用於 res.redirect() 跳轉。
  • strict routing  :嚴格路徑,啓用後不會忽略路徑末尾的「/ 」。
  • jsonp callback:開啓透明的 JSONP 支持。
  • case sensitive routes:路徑區分大小寫。
/*
* @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);
});
相關文章
相關標籤/搜索