zoukankan      html  css  js  c++  java
  • node 通用的中间件

    为什么学习Node,因为他的门槛比较高一点,现在比较热门一点。

    技术这种东西,用最短的时间学会了收益终身。

    1.常用的中间件:

    // 通用的中间件

    //bodyParser connect 内建的中间件,用来解析请求体,支持 application/json, application/x-www-form-urlencoded, 和 multipart/form-data。

    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({extended: false}));

    app.use(logger('dev'));  //connect 内建的中间件,在开发环境下使用,在终端显示简单的不同颜色的日志

    ************************************

    //session中间件的使用方法:

    方法1:

    app.use(session({
    secret: config.session_secret,
    store: new RedisStore({port: config.redis_port,host: config.redis_host,}),
    resave: true,
    saveUninitialized: true,
    }));

    方法2:

    app.use(session({

    secret: '8dj3Vd3',

    store: new RedisStore(conf.SESSION_REDIS),

    //name: "wab_session",
    cookie: {maxAge: 1000 * 3600 * 10},//10小时
    resave: false,
    saveUninitialized: true
    }));

    ************************************

    app.use(require('cookie-parser')(config.session_secret));  请看这个微博:http://www.cnblogs.com/coolicer/p/4191548.html
    app.use(compress());


    2.看看这个博客:http://zhan.renren.com/mynodejs?gid=3602888498042060523&checked=true

    分析一下上面的博客:

    在 node.js 中模块分为核心模块和文件模块两种,核心模块是通过 require('xxxx') 导入的,文件模块是以 require('/xxxx') 或 require('./xxxx')、require('../xxxx') 形式导入的;核心模块是用c/c++编译的二进制模块,而文件模块是后缀为.js、.json、.node 的文件,在 node.js 中一个文件/文件夹也可以称之为一个模块。更多关于模块及模块加载顺序的信息请查阅官网:http://nodejs.org/api/all.html#all_modules 
    这里导入了 express、http、path 核心模块,routes 文件夹下的 index.js 和 user.js 文件模块。

    因为 express 框架是依赖 connect 框架(Node的一个中间件框架)创建而成的,可查阅 connect 文档:http://www.senchalabs.org/connect/和 express 官方文档:http://expressjs.com/api.html了解更多内容。
    app.set(name, value):设置 name 的值为 value 
    app.set('port', process.env.PORT || 3000):设置端口为 process.env.PORT 或 3000 
    app.set('views', __dirname + '/views'):设置 views 文件夹为视图文件的目录,存放模板文件,__dirname 为全局变量,存储着当前正在执行脚本所在的目录名。
    app.set('view engine', 'ejs'):设置视图模版引擎为 ejs

    app.use([path], function):使用中间件 function,可选参数path默认为"/"
    app.use(express.favicon()):connect 内建的中间件,使用默认的 favicon 图标,如果想使用自己的图标,需改为app.use(express.favicon(__dirname + '/public/images/favicon.ico')); 这里我们把自定义的 favicon.ico 放到了 public/images 文件夹下。
    app.use(express.logger('dev')):connect 内建的中间件,在开发环境下使用,在终端显示简单的不同颜色的日志,比如在启动 app.js 后访问 localhost:3000,终端会输出:

                Express server listening on port 3000 GET / 200 21ms - 206b GET /stylesheets/style.css 304 4ms 

    数字200显示为绿色,304显示为蓝色。假如你去掉这一行代码,不管你怎么刷新网页,终端都只有一行 Express server listening on port 3000。
    app.use(express.bodyParser()):connect 内建的中间件,用来解析请求体,支持 application/json, application/x-www-form-urlencoded, 和 multipart/form-data。
    app.use(express.methodOverride()):connect 内建的中间件,可以协助处理 POST 请求,伪装 PUT、DELETE 和其他 HTTP 方法。
    app.use(app.router):设置应用的路由(可选),详细请参考:http://stackoverflow.com/questions/12695591/node-js-express-js-how-does-app-router-work 
    app.use(express.static(path.join(__dirname, 'public'))):connect 内建的中间件,设置根目录下的 public 文件夹为静态文件服务器,存放 image、css、js 文件于此。
    if ('development' == app.get('env')) {app.use(express.errorHandler());}:开发环境下的错误处理,输出错误信息。

    app.get('/', routes.index):路由控制器,如果用户访问" / "路径,则由 routes.index 来控制,routes/index.js 内容如下:

                exports.index = function(req, res){ res.render('index', { title: 'Express' }); }; 

    通过 exports.index 导出 index 函数接口,app.get('/', routes.index) 相当于:

                app.get('/', function(req, res){ res.render('index', { title: 'Express' }); };) 

    res.render('index', { title: 'Express' }):调用 ejs 模板引擎解析 views/index.ejs(我们之前通过 app.set('views', __dirname + '/views')设置了模版文件默认存储在 views 下),并传入一个对象作为参数,这个对象只有一个属性 title: 'Express',即用字符串 Express 替换 views/index.ejs 中所有 title 变量,后面我们将会了解更多关于模板引的内容。

                http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); }); 

    这段代码的意思是创建服务器并监听3000端口,成功后在命令行中显示 Express server listening on port 3000,然后我们就可以通过在浏览器输入 localhost:3000 来访问了。

    这一小节我们学习了如何创建一个工程并启动它,了解了工程的大体结构,下一节我们将学习 Express 的基本使用及路由控制。

    
    
  • 相关阅读:
    bash的for循环从命令读取值
    BFS-hdu-1226-超级密码
    计算机改名导致数据库链接的诡异问题
    There is insufficient system memory to run this query 错误
    SQL Server 2008 R2的发布订阅配置实践
    MS SQL 日常维护管理常用脚本(二)
    TreeSize工具介绍
    迁移Reporting Services的方法与WMI错误
    spring-session-data-redis解决session共享的问题
    elasticSearch6源码分析(12)DiscoveryModule
  • 原文地址:https://www.cnblogs.com/coding4/p/5559909.html
Copyright © 2011-2022 走看看