上一节咱们构建了一个基础的 http 服务器,咱们能够接收 http 请求,可是咱们得作点什么吧 – 不一样的 http 请求,服务器应该有不一样的响应。node
处理不一样的 http 请求在咱们的代码中是一个不一样的部分,叫作路由选择。浏览器
咱们要为路由提供请求的 url 和其余须要的 get 及 post 参数,随后路由根据这些数据来执行相应的代码,所以,咱们须要查看 http 请求,从中提取出请求的 url 以及 get/post 参数。服务器
咱们须要的全部数据都会包含在 request 对象中,该对象做为回调函数(onRequest)的第一个参数传递。想要解析 request 对象中的数据就须要调用 url 模块或者 querystring 模块,该两个模块都是 nodejs 的内置模块。函数
var http = require('http'); var url = require('url'); function start() { function onRequest(request, response) { console.log(url.parse(request.url).pathname); response.writeHead({ 'Content-type': 'text/plain' }); response.write('Hello node.js'); response.end(); } http.createServer(onRequest).listen(8888); console.log('server start...'); } exports.start = start;
在浏览器中输入 http://localhost:8888/start 经过终端咱们能够看到请求的 url 路径,经过 url 路径为基准映射到不一样的处理程序上。如今咱们能够来写路由模块(route.js)了。post
function route(pathname) { console.log('route: ' + pathname); } exports.route = route;
有了路由模块,那么咱们把路由和服务器整合起来,首先扩展 server.js:ui
var http = require('http'); var url = require('url'); function start(route) { function onRequest(request, response) { var pathname = url.parse(request.url).pathname; route(pathname); response.writeHead({ 'Content-type': 'text/plain' }); response.write('Hello node.js'); response.end(); } http.createServer(onRequest).listen(8888); console.log('server start...'); } exports.start = start;
扩展 index.jsurl
var server = require('./server'); var route = require('./route'); server.start(route.route);
在终端开启服务器 node index
,能够看到终端输出的内容正是路由模块里面的内容,说明咱们的 http 服务器已经在使用路由模块了,并会将请求的路径传递给路由:spa
node index server start... route: /start route: /favicon.ico