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);