• 工程的结构文件


    Express新建的microblog项目结构

    1.app.js:项目入口及程序启动文件。 引入模块依赖, 模板引擎, 数据库引用等入口文件

    2.package.json:存储着工程的信息及模块依赖,当在 dependencies 中添加依赖的模块时

    3.node_modules:用来存放项目的依赖库, 存放安装的模块,当你在 package.json 添加依赖的模块并安装后,存放在这个文件夹下

    4.public:存放用来存放静态文件( image、css、js)等文件 

    5.routes:路由控制器。

    6.views:存放视图文件或者说模版文件 (MVC中的V), 相当于HTML页面

    7.bin:项目的启动文件,存放可执行文件 

    8.models:数据模型(相当于MVC中的M)。

    app.js 的配置说明

    /*
    * @模块依赖
    */
    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);
    });
    
  • 相关阅读:
    拥有自己的代码生成器—Newlife.XCode模板编写教程
    基于Newlife.XCode的权限系统(含数据集权限)【设计篇】
    拥有自己的代码生成器—NewLife.XCode代码生成器分析
    利用javascript来转换GB2312到UNICONDE &#形式
    和荣笔记 从 Unicode 到 GB2312 转换表制作程式
    如何做SVN迁移
    和荣笔记 GB2312 字符集和编码说明
    asp对象化之:基于adodb.stream的文件操作类
    Unicode 汉字内码表
    微软建议的ASP性能优化28条守则 之三
  • 原文地址:https://www.cnblogs.com/alantao/p/7998182.html
Copyright © 2020-2023  润新知