边看这个边写的: http://wenku.baidu.com/link?url=C4yLe-TVH6060u_x4t34H3Ze8tjoL7HjJaKgH-TvHnEYl-T_gAMYwhmrCeM0Ji59WBPSkoEXPTWk8dPIZVpbFg_by_gN6DJNGYfjlFuYxE_

上篇文章讲到了浏览器中访问 http://127.0.0.1:8888/ 输出 "hello world",  但是实际当中, 用户访问的或许是 http://127.0.0.1:8888/start 异或者 http://127.0.0.1:8888/upload , 那么node.js该如何去针对不同的请求路径(url) 做出不同的响应呢。

要做的事

1.构建一个路由模块

模块作用:提供请求的URL和其他需要的GET及POST参数,随后根据这些数据来执行相应的代码。因此,我们需要查看HTTP请求,从中提取出请求的URL以及GET/POST参数。

2.构建一个处理请求的程序模块

模块作用:存放不同的处理程序,和请求的URL相对应

3.将前面两个模块和http服务器结合起来

一、构建一个 路由 模块

新建一个 router.js 写入

// 路由模块,针对不同的请求,做出不同的响应
// handle 处理请求方法function route(handle, pathname) {console.log("About to route a request for " + pathname);// 检查给定的路径对应的请求处理程序是否存在,如果存在的话直接调用相应的函数if (typeof handle[pathname] == "function") {handle[pathname]();} else {console.log("No request handler found for " + pathname);}
}exports.route = route;

二、构建一个处理请求的程序模块

新建一个 requestHandlers.js 写入

// 存放不同的处理程序,和请求的URL相对应
function start() {console.log("Request handler 'start' was called.");
}function upload() {console.log("Request handler 'upload' was called.");
}exports.start = start;
exports.upload = upload;

三、将前面两个模块和http服务器结合起来

路由模块的作用是:提供请求的URL和其他需要的GET及POST参数,随后根据这些数据来执行相应的代码。因此,我们需要查看HTTP请求,从中提取出请求的URL以及GET/POST参数。

我们需要的所有数据都会包含在request对象中,该对象作为onRequest()回调函数的第一个参数传递。但是为了解析这些数据,我们需要额外的Node.JS模块,它们分别是url和querystring模块。

在server.js里面分别引入

url模块:解析url

querystring模块: 解析GET和 POST请求带的参数 (后面再说)

修改 server.js

// 请求(require)一个 nodejs 自带的 http模块
// 请求(require)一个 nodejs 自带的 url解析模块
var http = require("http"),url = require("url");// console.log(url);// 调用 http模块 提供的 createServer函数:
// 返回一个对象,这个对象有一个 listen 方法,这个方法带一个数值参数,
// 指定这个 http 服务器监听的端口号.function start(route, handle) {function onRequest(request, response) {// 获取请求路径var pathname = url.parse(request.url).pathname;// 关闭nodejs 默认访问 favicon.icoif (!pathname.indexOf('/favicon.ico')) {return; };// 收到来自 pathname 的请求console.log("Request for " + pathname + " received.");// 路由器处理
        route(handle, pathname);// 返回数据response.writeHead(200, {"Content-type": "text/plain"});response.write("Hello world!");response.end();}http.createServer(onRequest).listen(8888);console.log("Server has start!");
}// 开放接口
exports.start = start;

修改 index.js

var server = require("./server"),router = require("./router"),requestHandlers = require("./requestHandlers");// handle 保存不同请求路径对应的处理方法
var handle = {};handle["/"] = requestHandlers.start;
handle["/start"] = requestHandlers.start;
handle["/upload"] = requestHandlers.upload;// 传入路由模块方法, 路径处理方法
server.start(router.route, handle);

四、测试

在 command 面板输入 node index.js

浏览器访问 http://127.0.0.1:8888/start   command 面板显示

整个过程中有个插曲,就是我测试的时候 command面板 每次都会输出一次 访问 /favicon.ico 的记录,然后百度得到了屏蔽的方法
http://cnodejs.org/topic/529be564a6957a0809408cab
在 server.js 中插入

// 关闭nodejs 默认访问 favicon.icoif (!pathname.indexOf('/favicon.ico')) {return; };

 

转载于:https://www.cnblogs.com/qiangspecial/p/3595419.html

node.js 针对不同的请求路径(url) 做出不同的响应相关推荐

  1. Node.js模拟发起http请求从异步转同步的5种方法

    使用Node.js模拟发起http请求很常用的,但是由于Node模块(原生和第三方库)提供里面的方法都是异步,对于很多场景下应用很麻烦,不如同步来的方便.下面总结了几个常见的库API从异步转同步的几种 ...

  2. iOS开发网络篇 一一 请求路径(URL)中文转码问题

    当发送网络请求: 确定请求路径URL 时, 观察url中是否包含中文, 如果包含中文 需要将url中的中文进行转码操作. 注意: 上面这种情况 只针对于发送GET请求,因为GET请求的URL 包含用户 ...

  3. Node.js~ioredis处理耗时请求时连接数瀑增

    关于redis连接数过高的解释 对于node.js开发环境里,使用传统的redis或者使用ioredis都是不错的选择,而在处理大数据请求程中,偶尔出现了连接池( redis服务端的最大可用连接数,默 ...

  4. Node.js:get/post请求、全局对象、工具模块

    一.GET/POST请求 在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交.表单提交到服务器一般都使用 GET/POST 请求. 1.获取GET请求内容 由于GET请求直接被嵌入在路径 ...

  5. nock模拟服务响应_使用Node.js nock拦截HTTP请求

    nock模拟服务响应 Unit testing external APIs is difficult no matter what language you do it in.  Hell, work ...

  6. 如何使用Node.js获取当前脚本的路径?

    我如何获得Node.js中脚本的路径? 我知道有process.cwd ,但这只是指调用脚本的目录,而不是脚本本身. 例如,假设我在/home/kyle/运行以下命令: node /home/kyle ...

  7. node.js简单实现post请求

    //需求:通过post方式实现新增英雄的功能 //1.创建服务器 //2.总体思路是:创建服务器---获取请求接口和方式---'data'监听事件接收数据---'end'事件执行完接收---把原jso ...

  8. ajax 高并发请求,理解node.js处理高并发请求原理

    很少分享技术文章,写的不好的地方请大家多多指教,本文是自己对于node.js的一些见解,如有纰漏请在评论区交流. 高并发策略 通常高并发的解决方案就是提供多线程模型,服务器为每个客户端请求分配一个线程 ...

  9. Node.js webpack中url-loader处理图片路径

    默认情况下, webpack 无法处理 css 文件中的 url 地址,不管是图片还是 字体库, 只要是 URL 地址,都处理不了,所以我们要使用 url-loader进行处理图片的url地址 安装 ...

最新文章

  1. 【vijos】P1659 河蟹王国
  2. 利用 TensorFlow 实现上下文的 Chat-bots
  3. 【转】IAR与Keil两款开发工具区别
  4. 单源最短路径(spfa)
  5. Docker(二)-在Docker中部署Nginx实现负载均衡(视频)
  6. 前端FISH框架学习笔记
  7. 布线问题----回溯法
  8. 市场营销渠道含义是什么?
  9. R语言使用lm函数构建线性回归模型、线性回归模型的诊断、使用influence.measures函数识别有影响力的观察值
  10. 厂级监控系统镜像服务器,厂级监控信息系统(SIS).PDF
  11. LDC——Locally Decodable Code
  12. 手机测试用例-多媒体测试用例
  13. php 菜单模块,POSCMS模块菜单
  14. 欧拉筛法(线性筛)的学习理解
  15. 熊猫烧香作者李俊自主创业开网络安全公司
  16. Nginx基本使用和代理服务器(负载均衡)--保姆级教程
  17. Linux下execl函数与execlp函数的具体详细用法
  18. 前端面试那些你必须手撕的代码
  19. Redis入门权威指北
  20. 「RISC-V Arch」RISC-V 规范结构

热门文章

  1. android怎样判断插入数据是否成功_MySQL一个表的自增id用完了,背井大佬让我用这些姿势再往里插数据...
  2. Win10 和 Ubuntu 20.04 安装 face_recognition 和 dlib
  3. Java 集合容器篇面试题(上)-王者笔记《收藏版》
  4. 新版opencv兼容旧版_【标准换版】关于家用和类似用途电器用外置电源适配器、充电器和内置开关电源产品认证执行新版标准的通知...
  5. Java一对多关系示例
  6. C语言全局变量和局部变量深入
  7. python中怎么判断字母大小写_python判断字符串是字母 数字 大小写(转载)
  8. matlab的fft点数,matlab fft的点数问题
  9. python基础项目实践之: 学生通讯录管理系统
  10. UFLDL之Softmax回归