JS在线运行

版本:

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

                        
以下是用户最新保存的代码
箭头函数this 发布于:2024-11-20 11:12 思源面包屑右侧添加全屏按钮 发布于:2024-11-16 07:07 思源给集市添加筛选功能 发布于:2024-11-15 20:51 测试基础函数 发布于:2024-11-13 14:40 批量导入文档到数据库0.0.6-笔记本版 发布于:2024-11-13 09:07 js quirks 发布于:2024-11-11 10:28 思源实现可手动修改数据库主键引用块的标题 发布于:2024-11-11 12:18 解析markdown ul 发布于:2024-11-08 23:33 臭豆腐大范甘迪方便v更大发吧 发布于:2024-11-08 11:38 测试有限状态机代码 发布于:2024-11-08 11:37 校验身份证格式 发布于:2024-11-08 01:14 这是一个项目 发布于:2024-11-03 14:29 群艺馆js 发布于:2024-11-02 19:24 ## Temu 面单打印 发布于:2024-11-14 15:53 获取数组的维度 发布于:2024-10-31 15:18 cascader tree 结构 发布于:2024-11-06 11:52 经纬度 度分秒转度 发布于:2024-11-06 08:33 验证坐标系问题 发布于:2024-11-06 08:40 加密 作业 demo 发布于:2024-11-11 15:20 数组不常用方法 发布于:2024-10-29 13:12 测试一段加密算法,需要每次对明文进行加密处理 发布于:2024-10-28 16:24 防抖节流函数 发布于:2024-10-21 20:14 TonScan-Str-Bytes 发布于:2024-10-21 17:01 UE Logger 发布于:2024-10-18 10:23 导航业务数组处理 发布于:2024-10-18 10:39 promise测试 发布于:2024-10-17 16:21 获取当前时间戳 发布于:2024-10-29 11:20 拓扑排序示例 发布于:2024-10-11 14:49 again-wyex 发布于:2024-10-12 11:12 json排序 发布于:2024-10-10 17:32 链滴自动签到支持二次验证版 发布于:2024-10-10 14:16 call实现 发布于:2024-10-09 17:31 随便写的,只是随便写的 发布于:2024-10-10 10:49 思源代码块超出指定高度折叠 发布于:2024-10-04 14:09 思源鼠标移入大纲自动展开子标题 发布于:2024-09-25 02:49 思源建文档的时候自动设置为自定义的某个图标 发布于:2024-09-22 06:35 异步任务线程池 发布于:2024-09-21 16:42 JS的各种锻炼 发布于:2024-09-13 16:53 思源同步感知脚本 发布于:2024-09-16 11:42 在线测试各种脚本! 发布于:2024-09-12 14:37 思源编辑器增加标尺 发布于:2024-09-11 16:21 思源查询不在数据库中的文档2 发布于:2024-09-07 16:32 思源简单锁定笔记 发布于:2024-09-07 23:38 项目热度榜单 发布于:2024-09-06 15:20 修改z坐标 发布于:2024-09-06 15:23 带千分符的大小比较 发布于:2024-09-06 13:05 altG临时 发布于:2024-09-09 18:08 批量导入文档到数据库0.0.6版 发布于:2024-11-08 22:42 最长合法表达式 发布于:2024-09-04 21:55 API集群负载统计 发布于:2024-09-04 19:04 [更多]
显示目录

路由



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