JS代码信息

运行结果
教程手册
代码仓库
极速运行
交互输入
极速运行模式,不支持键盘输入语句但是拥有更高的运行速度,输出简洁明了 。 点击编辑器上方的运行按钮即刻体验吧。
以下是用户最新保存的代码
蛇形遍历树 发布于:2021-03-08 21:19 分时间间隔执行函数 发布于:2021-03-08 20:12 call等一系列源码实现 发布于:2021-03-08 18:49 QQ和GP的计算 发布于:2021-03-08 00:46 写着玩。。 发布于:2021-03-05 19:15 木头切割问题 发布于:2021-03-05 18:05 有限次数定时器生成器 发布于:2021-03-05 17:42 封装断线重连 发布于:2021-03-05 14:17 Class 的基本语法 发布于:2021-03-05 13:09 排序功能的用法 发布于:2021-03-04 15:46 数组去重功能 发布于:2021-03-04 15:42 Promise的链式传递。 场景: 获取了一个博客列表, 根据creatorid获取用户头像,继续根据xxx获取xxx。。。 最终进行处理。 发布于:2021-03-04 11:42 class 版 - 简单手写Promsie 发布于:2021-03-03 01:04 数组查重,逻辑或 发布于:2021-03-03 00:35 promise resolve reject 发布于:2021-03-02 20:58 节点列表遍历 发布于:2021-03-02 19:35 promise.all实现 发布于:2021-03-02 18:27 冒泡排序算法 发布于:2021-03-02 15:20 JS 作用域和闭包例子 发布于:2021-03-02 09:56 2.1 巧用map 两数求和 发布于:2021-02-25 23:39 2.2 双指针法 合并两个有序数组 发布于:2021-02-25 23:34 2.3三数求和 双指针中的对撞指针法 发布于:2021-02-25 23:23 引用类型在比较运算符时候,隐式转换会调用本类型toString或valueOf方法 发布于:2021-02-25 15:08 展平数组方式 发布于:2021-02-25 15:06 HTML TEST 发布于:2021-02-25 13:09 函数改造方法 发布于:2021-02-25 13:50 //已知如下数组: //编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组 发布于:2021-02-25 11:14 获取当前页面出现最多的节点类型 发布于:2021-02-24 19:26 自定义排序算法 发布于:2021-02-24 14:41 介绍算法时间复杂度 发布于:2021-02-23 23:11 介绍算法时间复杂度 发布于:2021-02-23 19:52 json列表过滤固定键值 发布于:2021-02-23 18:51 JavaScript 实现深度拷贝 发布于:2021-02-23 17:46 黄页商家中心 抢名次、封顶状态计算 发布于:2021-02-23 17:08 黄页商家中心 竞价排名 按出价计算排名 发布于:2021-02-23 11:53 黄页商家中心 竞价排名 再次竞价 按排名计算价格 发布于:2021-02-23 14:03 黄页商家中心 竞价排名 首次竞价 按排名计算价格 发布于:2021-02-23 14:25 查找数组元素 发布于:2021-02-23 09:51 排序算法之快速排序 发布于:2021-02-24 09:36 排序算法之归并排序 发布于:2021-02-23 11:00 第 k 大的数字 发布于:2021-02-22 14:38 排序算法之插入排序 发布于:2021-02-22 11:03 排序算法之选择排序 发布于:2021-02-22 09:54 中文检测,存在为True 发布于:2021-02-21 14:30 JS Set数据结构 发布于:2021-02-21 09:11 JavaScript apply方法 发布于:2021-02-21 08:58 JavaScript 实现二叉树 发布于:2021-02-20 19:32 JavaScript bind方法 发布于:2021-02-20 19:28 JavaScript call方法 发布于:2021-02-20 19:18 JavaScript 组合继承 发布于:2021-02-20 17:39 [更多]
显示目录

路由

Node.js 路由

我们要为路由提供请求的URL和其他需要的GET及POST参数,随后路由需要根据这些数据来执行相应的代码。

因此,我们需要查看HTTP请求,从中提取出请求的URL以及GET/POST参数。这一功能应当属于路由还是服务器(甚至作为一个模块自身的功能)确实值得探讨,但这里暂定其为我们的HTTP服务器的功能。

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

 url.parse(string).query
                                           |
           url.parse(string).pathname      |
                       |                   |
                       |                   |
                     ------ -------------------
http://localhost:8888/start?foo=bar&hello=world
                                ---       -----
                                 |          |
                                 |          |
              querystring(string)["foo"]    |
                                            |
                         querystring(string)["hello"]

当然我们也可以用querystring模块来解析POST请求体中的参数,稍后会有演示。

现在我们来给onRequest()函数加上一些逻辑,用来找出浏览器请求的URL路径:

var http = require("http");
var url = require("url");

function start() {
  function onRequest(request, response) {
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
  }

  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}

exports.start = start;

好了,我们的应用现在可以通过请求的URL路径来区别不同请求了--这使我们得以使用路由(还未完成)来将请求以URL路径为基准映射到处理程序上。

在我们所要构建的应用中,这意味着来自/start和/upload的请求可以使用不同的代码来处理。稍后我们将看到这些内容是如何整合到一起的。

现在我们可以来编写路由了,建立一个名为router.js的文件,添加以下内容:

function route(pathname) {
  console.log("About to route a request for " + pathname);
}

exports.route = route;

如你所见,这段代码什么也没干,不过对于现在来说这是应该的。在添加更多的逻辑以前,我们先来看看如何把路由和服务器整合起来。

我们的服务器应当知道路由的存在并加以有效利用。我们当然可以通过硬编码的方式将这一依赖项绑定到服务器上,但是其它语言的编程经验告诉我们这会是一件非常痛苦的事,因此我们将使用依赖注入的方式较松散地添加路由模块。

首先,我们来扩展一下服务器的start()函数,以便将路由函数作为参数传递过去:

var http = require("http");
var url = require("url");

function start(route) {
  function onRequest(request, response) {
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");

    route(pathname);

    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
  }

  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}

exports.start = start;

同时,我们会相应扩展index.js,使得路由函数可以被注入到服务器中:

var server = require("./server");
var router = require("./router");

server.start(router.route);

在这里,我们传递的函数依旧什么也没做。

如果现在启动应用(node index.js,始终记得这个命令行),随后请求一个URL,你将会看到应用输出相应的信息,这表明我们的HTTP服务器已经在使用路由模块了,并会将请求的路径传递给路由:

bash$ node index.js
Request for /foo received.
About to route a request for /foo

以上输出已经去掉了比较烦人的/favicon.ico请求相关的部分。

由JSRUN为你提供的JS在线工具
        JSRUN提供的JS在线运行,JS 在线编译工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。

title

使用此草稿 删除草稿

皮肤:

运行模式:

嵌入代码 iframe嵌入: