JS在线运行

版本:

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

                        
以下是用户最新保存的代码
高低频修图 发布于:2025-03-10 15:43 Subscriber form processing 发布于:2025-03-09 23:46 高矮个子排队 发布于:2025-03-07 19:03 判断一组不等式是否满足约束并输出最大差 发布于:2025-03-07 18:53 分糖果(digui) 发布于:2025-03-07 18:25 最长子字符串的长度(一) 发布于:2025-03-07 18:20 【数组拼接】 发布于:2025-03-07 18:11 计算三叉搜索树的高度 发布于:2025-03-07 17:44 计算三叉搜索树的高度 发布于:2025-03-07 17:44 增强的strstr 发布于:2025-03-07 17:16 相应报文时间 发布于:2025-03-06 19:20 计算面积( 发布于:2025-03-06 18:59 学生排序算法 发布于:2025-03-06 18:22 整数对最小和 发布于:2025-03-06 17:18 字符串变换最小字符串 发布于:2025-03-06 17:06 考勤判定算法 发布于:2025-03-06 16:52 物品数量加一 发布于:2025-03-05 21:46 连续字母长度 发布于:2025-03-04 19:12 英文输入法 发布于:2025-03-04 18:52 字符串分割 发布于:2025-03-04 18:33 防沉迷系统 发布于:2025-03-04 18:00 TLV解码 发布于:2025-03-04 16:39 敏感字段加密 发布于:2025-03-03 19:31 001 流浪地球 发布于:2025-03-03 18:49 星创社|超级码力-海报 发布于:2025-03-03 10:15 一开始就不知道是什么作用的函数 发布于:2025-03-02 18:48 blob对象转换成文本 发布于:2025-02-27 15:28 比较数据是否一致 发布于:2025-02-26 18:09 格式化大模型返回的markdown格式的字符串 发布于:2025-02-25 15:46 判断时间段是否包含 发布于:2025-02-20 19:57 自动计算拼版数量 发布于:2025-02-20 12:50 显示头加上当前列表的物品名称 发布于:2025-02-20 00:53 自定义对象的valueOf方法 发布于:2025-02-12 15:12 IP地址计算 发布于:2025-02-10 15:48 get取值器函数和set存值器函数 发布于:2025-02-10 10:40 数字文本日期格式化 发布于:2025-02-09 09:19 第二部分-数字处理 发布于:2025-02-08 21:17 使用new Function模拟沙盒环境 发布于:2025-02-08 17:55 js with关键字用法 发布于:2025-02-08 17:40 JS函数剩余参数用法示例 发布于:2025-02-08 17:21 JS代码-数字处理 发布于:2025-02-08 20:28 实际的时间处理函数 发布于:2025-02-07 19:17 文本+数字 发布于:2025-02-07 20:53 实现一些日期时间函数 发布于:2025-02-07 18:34 bd-ticket-guard-client-data-req 发布于:2025-02-05 22:12 所有的继承方式和缺点 发布于:2025-02-04 14:16 # js学习笔记 发布于:2025-01-22 17:41 测试数据记录 发布于:2025-01-21 11:17 js两个数组比较,若两个数组有相同的key值,则第二个数组的元素添加到第一个数组相同key值元素的后面 发布于:2025-01-17 13:38 递归寻找子节点 发布于:2025-01-16 13:50 [更多]
显示目录

路由



学习嵌入式的绝佳套件,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