JS在线运行

版本:

所属目录
点击了解高性能代码运行API
运行结果
教程手册
代码仓库
极速运行
终端运行
图形+终端

                        
以下是用户最新保存的代码
基于区块链的数字身份系统的设计与实现 发布于:2024-03-21 19:56 模版引擎简单方案 发布于:2024-03-21 17:26 array filter 发布于:2024-03-21 13:53 模版引擎解析 发布于:2024-03-20 21:08 列表转树的方案 发布于:2024-03-20 20:27 排序算法介绍 发布于:2024-03-20 13:40 处理数据demo 20240318 发布于:2024-03-19 14:42 面试遇到的题目 发布于:2024-03-19 11:25 测试代码。 发布于:2024-03-19 00:52 快速排序的算法 发布于:2024-03-19 00:49 我的联系代码 发布于:2024-03-18 23:13 思迅天店程序易用修改 发布于:2024-03-19 00:42 数组统计同一id数量 发布于:2024-03-17 21:32 手写promise 发布于:2024-03-17 00:13 1. 数据排序 假设有如下字符串“A12”,其中“A”表示数据类型(A-Z),“12”表示数据序号(0-9)。 现在需要对一组数据先按照数据序号再按照数据类型进行排序。 例如:["B3","D2","F1","A9","D12","A2","C1","Z0","B1"]=>["Z0","B1","C1","F1","A2","D2","B3","A9","D12"] 发布于:2024-03-15 23:50 BMS经纬度变更 发布于:2024-03-15 10:18 继承: 原型继承 1.定义父类型构造函数 2.给父类型的原型添加方法 3.定义子类型的构造函数 4.创建父类型的对象赋值给子类型的原型 5.将子类型原型的构造属性设置为子类型 6.给子类型原型添加方法 7.创建子类型的对象: 可以调用父类型的方法 来自http://t.csdnimg.cn/ToxNF 发布于:2024-03-14 16:39 编辑文件夹树结构,过滤树里面数组为空值 发布于:2024-03-12 16:02 转化为json文件 发布于:2024-03-08 13:55 Three.js示例 发布于:2024-03-08 09:51 qs示例代码 发布于:2024-03-04 15:08 接龙拆解,获取总数。 发布于:2024-03-04 10:16 ## NuanXinPro 在线编辑 发布于:2024-03-04 09:49 国科大csv课表获取 发布于:2024-03-03 15:35 reduce 使用 发布于:2024-03-01 16:21 测试所用的 发布于:2024-02-28 21:21 promise.all调用案例 发布于:2024-02-27 15:56 保存测试nodejs 事件的6个阶段执行逻辑 发布于:2024-02-23 21:29 回调获取 路径数组 发布于:2024-02-22 14:27 利用学生个人信息(包括部分成绩)和全课程的系数,输出学生的信息拼接和加权成绩 发布于:2024-02-18 18:59 node AES加密 发布于:2024-02-18 16:52 js实现——归并排序 发布于:2024-02-18 15:07 倒计时代码 发布于:2024-02-16 12:04 js 生成密码 发布于:2024-02-14 13:41 服务器端程序 发布于:2024-02-07 16:50 从两个数组中整理出新数组 发布于:2024-02-05 23:39 测试lsd 发布于:2024-02-05 17:18 live2d处理 发布于:2024-02-04 16:40 匹配一段文字的指定内容为数组 发布于:2024-02-03 14:28 - Node测试代码 发布于:2024-02-03 00:49 柯里化简单实现 发布于:2024-02-20 11:14 测试遍历找区域 发布于:2024-02-01 11:20 策略模式 js 发布于:2024-02-01 11:16 APS数据 发布于:2024-01-31 15:38 一次性定时器程序 发布于:2024-01-31 09:47 多维数组降重 发布于:2024-01-30 20:39 简单的switchcase 发布于:2024-01-30 20:01 APS排产数据 发布于:2024-01-29 16:06 nodejs 执行hmac 发布于:2024-01-26 18:56 签名的试用,加密,测试 发布于:2024-01-26 01:25 [更多]
显示目录

路由



学习嵌入式的绝佳套件,esp8266开源小电视成品,比自己去买开发板+屏幕还要便宜,省去了焊接不当搞坏的风险。 蜂鸣版+触控升级仅36元,更强的硬件、价格全网最低。

点击购买 固件广场

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操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。
yout