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 的基本使用及路由控制。

    
    
  • 相关阅读:
    417 Pacific Atlantic Water Flow 太平洋大西洋水流
    416 Partition Equal Subset Sum 分割相同子集和
    415 Add Strings 字符串相加
    414 Third Maximum Number 第三大的数
    413 Arithmetic Slices 等差数列划分
    412 Fizz Buzz
    410 Split Array Largest Sum 分割数组的最大值
    409 Longest Palindrome 最长回文串
    day22 collection 模块 (顺便对比queue也学习了一下队列)
    day21 计算器作业
  • 原文地址:https://www.cnblogs.com/coding4/p/5559909.html
Copyright © 2011-2022 走看看