zoukankan      html  css  js  c++  java
  • Node.js Web开发:Connect

    2019-12-17

    10:14:57

         

     

     

     

     

     

     

     

    /**
     * Module dependencies.
     */
    
    var http = require('http')
      , fs = require('fs')
    
    /**
     * Create our server.
     */
    
    var server = http.createServer(function (req, res) {
      if ('GET' == req.method && '/images' == req.url.substr(0, 7)
        && '.jpg' == req.url.substr(-4)) {
        fs.stat(__dirname + req.url, function (err, stat) {
          if (err || !stat.isFile()) {
            res.writeHead(404);
            res.end('Not Found');
            return;
          }
          serve(__dirname + req.url, 'application/jpg');
        });
      } else if ('GET' == req.method && '/' == req.url) {
        serve(__dirname + '/index.html', 'text/html');
      } else {
        res.writeHead(404);
        res.end('Not found');
      }
    
      function serve (path, type) {
        res.writeHead(200, { 'Content-Type': type });
        fs.createReadStream(path).pipe(res);
      }
    });
    
    /**
     * Listen.
     */
    
    server.listen(3000);

     

     

    中间件就像从使用HTTP构建网站的抽离出许多方法

     

     

     

     

     

    server.js

    /**
     * Module dependencies.
     */
    
    var connect = require('connect')
      , time = require('./request-time')
    
    /**
     * Create server.
     */
    
    var server = connect.createServer();
    
    /**
     * Log requests.
     */
    
    server.use(connect.logger('dev'));
    
    /**
     * Implement time middleware.
     */
    
    server.use(time({ time: 500 }));
    
    /**
     * Fast response.
     */
    
    server.use(function (req, res, next) {
      if ('/a' == req.url) {
        res.writeHead(200);
        res.end('Fast!');
      } else {
        next();
      }
    });
    
    
    /**
     * Slow response.
     */
    
    server.use(function (req, res, next) {
      if ('/b' == req.url) {
        setTimeout(function () {
          res.writeHead(200);
          res.end('Slow!');
        }, 1000);
      } else {
        next();
      }
    });
    
    /**
     * Listen.
     */
    
    server.listen(3000);
    /**
     * Request time middleware.
     *
     * Options:
     *   - `time` (`Number`): number of ms after which we log (100)
     *
     * @param {Object} options
     * @api public
     */
    
    module.exports = function (opts) {
    
      var time = opts.time || 100;
    
      return function (req, res, next) {
        var timer = setTimeout(function () {
          console.log(
              '33[90m%s %s33[39m 33[91mis taking too long!33[39m'
            , req.method
            , req.url
          );
        }, time);
    
        var end = res.end;
        res.end = function (chunk, encoding) {
          res.end = end;
          res.end(chunk, encoding);
          clearTimeout(timer);
        };
    
        next();
      };
    
    };

     

     

     

     

     

     

     

     

    /**
     * Module dependencies
     */
    
    var connect = require('connect')
      , users = require('./users')
    
    /**
     * Create server
     */
    
    var server = connect(
        connect.logger('dev')
      , connect.bodyParser()
      , connect.cookieParser()
      , connect.session({ secret: 'my app secret' })
      , function (req, res, next) {
          if ('/' == req.url && req.session.logged_in) {
            res.writeHead(200, { 'Content-Type': 'text/html' });
            res.end(
                'Welcome back, <b>' + req.session.name + '</b>. '
              + '<a href="/logout">Logout</a>'
            );
          } else {
            next();
          }
        }
      , function (req, res, next) {
          if ('/' == req.url && 'GET' == req.method) {
            res.writeHead(200, { 'Content-Type': 'text/html' });
            res.end([
                '<form action="/login" method="POST">'
              ,   '<fieldset>'
              ,     '<legend>Please log in</legend>'
              ,     '<p>User: <input type="text" name="user"></p>'
              ,     '<p>Password: <input type="password" name="password"></p>'
              ,     '<button>Submit</button>'
              ,   '</fieldset>'
              , '</form>'
            ].join(''));
          } else {
            next();
          }
        }
      , function (req, res, next) {
          if ('/login' == req.url && 'POST' == req.method) {
            res.writeHead(200);
            if (!users[req.body.user] || req.body.password != users[req.body.user].password) {
              res.end('Bad username/password');
            } else {
              req.session.logged_in = true;
              req.session.name = users[req.body.user].name;
              res.end('Authenticated!');
            }
          } else {
            next();
          }
        }
      , function (req, res, next) {
          if ('/logout' == req.url) {
            req.session.logged_in = false;
            res.writeHead(200);
            res.end('Logged out!');
          } else {
            next();
          }
        }
    );
    
    /**
     * Listen.
     */
    
    server.listen(3000);

     

     

     

     

     

  • 相关阅读:
    经管-7
    均衡价格和均衡产量以及偏分求导
    点弹性系数计算
    洛谷-P5703 【深基2.例5】苹果采购
    洛谷-P1616 疯狂的采药
    洛谷-P1049 装箱问题
    洛谷-P1048 采药
    洛谷-P1064 金明的预算方案
    操作系统启动
    mybatis中使用注解查询和使用xml配置文件查询相互对应关系
  • 原文地址:https://www.cnblogs.com/JasonPeng1/p/12053087.html
Copyright © 2011-2022 走看看