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(
          '\033[90m%s %s\033[39m \033[91mis taking too long!\033[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);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-12-17 10:35  JasonPeng1  阅读(209)  评论(0编辑  收藏  举报