68 # 中间层如何请求其他服务

简介: 68 # 中间层如何请求其他服务

前端 ajax 有跨域问题,可以先访问中间层,在通过 node 去请求别的服务端口,可以解决跨域问题

编写中间层调用

// 中间层的方式
const http = require("http");
// http.get 默认发送 get 请求
// http.request 支持其他请求格式 post
let client = http.request(
    {
        path: "/login",
        hostname: "localhost",
        port: 3000,
        method: "POST",
        headers: {
            "Content-Type": "application/json"
        }
    },
    (res) => {
        console.log("状态码", res.statusCode);
        console.log("请求头", res.headers);
        res.on("data", (chunk) => {
            console.log(chunk.toString());
        });
    }
);
client.end(`{"kaimo": "313"}`);

服务端代码:

const http = require("http");
const url = require("url");
const querystring = require("querystring");
let server = http.createServer();
server.on("request", (req, res) => {
    let { pathname } = url.parse(req.url);
    console.log("req.method---->", req.method);
    // 1)配置跨域
    // 当前请求我的源
    // res.setHeader("Access-Control-Allow-Origin", req.headers.origin);
    // 允许携带header
    // res.setHeader("Access-Control-Allow-Headers", "Content-Type,Authorization");
    // 默认支持 get 和 post
    // res.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT");
    /**
     * 预检请求(Preflight Request)是跨域资源共享(CORS)的一部分,它允许在请求头中包含一些特殊信息,
     *      以便服务器确认客户端是否具有足够的权限来访问受保护的资源。
     * 预检请求通常在请求方法为 OPTIONS 时发生,以检查客户端是否能够成功请求受保护的资源。
     * */
    // 设置 OPTIONS 发送频率
    // res.setHeader("Access-Control-Max-Age", 10); // 设置缓存预检响应为 10 秒
    // 遇到 OPTIONS 预检请求,直接成功即可
    // if (req.method === "OPTIONS") {
    //     res.statusCode = "200";
    //     res.end(); // 内部会自己判断是否加了跨域头
    // }
    // 2)解析请求体
    const arr = [];
    req.on("data", (chunk) => {
        arr.push(chunk);
    });
    req.on("end", () => {
        let result = Buffer.concat(arr).toString();
        let obj;
        if (req.headers["content-type"] === "application/x-www-form-urlencoded") {
            obj = querystring.parse(result, "&", "=");
        } else if (req.headers["content-type"] === "application/json") {
            obj = JSON.parse(result);
        }
        console.log("obj---->", obj);
        // 3)根据不同路径返回对应内容
        if (pathname === "/login" && req.method == "POST") {
            res.setHeader("Content-Type", "application/json");
            res.end("登录成功");
        }
        if (pathname === "/regist" && req.method == "POST") {
            res.setHeader("Content-Type", "application/json");
            res.end(JSON.stringify(obj));
        }
    });
});
server.listen(3000);

我们启动服务端的服务,然后执行中间层

nodemon "68 # 中间层如何请求其他服务.js"
node client.js

可以看到请求成功

目录
相关文章
|
2天前
|
云安全 人工智能 算法
以“AI对抗AI”,阿里云验证码进入2.0时代
三层立体防护,用大模型打赢人机攻防战
1294 3
|
2天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
578 3
|
3天前
|
人工智能 Rust 运维
这个神器让你白嫖ClaudeOpus 4.5,Gemini 3!还能接Claude Code等任意平台
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费
|
10天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
710 4
|
2天前
|
存储 弹性计算 安全
阿里云服务器4核8G收费标准和活动价格参考:u2a实例898.20元起,计算型c9a3459.05元起
现在租用阿里云服务器4核8G价格是多少?具体价格及配置详情如下:云服务器ECS通用算力型u2a实例,配备4核8G配置、1M带宽及40G ESSD云盘(作为系统盘),其活动价格为898.20元/1年起;此外,ECS计算型c9a实例4核8G配置搭配20G ESSD云盘,活动价格为3459.05元/1年起。在阿里云的当前活动中,4核8G云服务器提供了多种实例规格供用户选择,不同实例规格及带宽的组合将带来不同的优惠价格。本文为大家解析阿里云服务器4核8G配置的实例规格收费标准与最新活动价格情况,以供参考。
244 150
|
3天前
|
人工智能 自然语言处理 安全
阿里云万小智AI建站:基础版、标准版、企业版主要功能及价格对比和选择参考
阿里云万小智 AI 建站是一款基于 AI 驱动的自助建站产品,无需代码基础,通过可视化拖拽与 AI 对话即可快速构建高性能、多语言、安全合规的网站。系统深度集成阿里云 ECS、RDS、OSS、CDN、SLB 与 Web 应用防火墙,保障高可用性、数据安全与全球访问速度。其提供多个版本,精准匹配从个人工作室到中大型企业的差异化需求。
237 167