前端快速搭建Node服务(解决跨域问题)
服务搭建应用场景
前端模块化基本成为了不可或缺的一步了,最近学习的时候,使用了EsModule语法,但使用import和export,会产生跨域问题,故自己本地搭建一个服务(不需要下载npm包),一步解决,真是超简单;
还有之前用过的接口转发(解决跨域)服务搭建,一起分享出来,希望可以帮助到各位程序yuan~
当然跨域除了服务接口转发方式以外,还可以用vue的devServer配置,还有Nginx反向代理,对于Nginx反向代理感兴趣的可以看看我的这篇博客~https://blog.csdn.net/weixin_44258964/article/details/146103202
服务搭建
极简服务搭建【解决本地跨域】
- 用到的是Node的内置模块
http、fs、path, 其中http用于创建、启动服务,fs则读取文件,path设置路径 - 终端cd [目录下],执行命令
node server.js执行即可获取到端口号3000的本地服务
废话不多说,直接上代码
const http = require('http');
const fs = require('fs');
const path = require('path');// 常见文件类型映射
const extNameMap = {'.html': 'text/html','.js': 'text/javascript','.css': 'text/css','json': 'application/json','.png': 'image/png','.jpg': 'image/jpg'
}// 创建 HTTP 服务器
const server = http.createServer((req, res) => {// 获取请求的 URL 路径const url = req.url;// 根据 URL 路径返回对应的文件let filePath = path.join(__dirname, url === '/' ? 'index.html' : url);// 读取文件并返回fs.readFile(filePath, (err, data) => {if (err) {// 如果文件不存在,返回 404res.writeHead(404, { 'Content-Type': 'text/plain' });res.end('404 Not Found');} else {// 根据文件类型设置 Content-Type,path.extname读取文件后缀名const extname = path.extname(filePath);const contentType = extNameMap[extname]// 返回文件内容res.writeHead(200, { 'Content-Type': contentType });res.end(data);}});
});// 启动服务器,监听端口
const PORT = 3000;
server.listen(PORT, () => {console.log(`Server is running on http://localhost:${PORT}`);
});
- 以上就是一个服务器的简单搭建了,是不是巨简单
- 亲测好用,基本可以解决import 的跨域问题~
接口转发服务搭建
- 启动一个简易服务器,转发服务端接口(见proxy),其余路由指向index.html
- 使用的是
express搭建服务http-proxy-middleware中间件转发服务接口 - 使用
express.static创建dist静态资源服务器,在使用express.use可以进行托管中间件
- proxy文件配置createProxyMiddleware参数结构
//proxy文件
module.exports = {dev: {'/api/': {target: 'https://xxx',changeOrigin: true,}},pre: {'/api/': {target: 'https://xxx',changeOrigin: true,}}
}
// createProxyMiddleware参数结构
{target: 'http://www.example.org/api',changeOrigin: true,}
- 服务搭建代码:
const path = require('path');
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');// 用于获取环境 process.argv - ['--env=dev']
function getArgs(args) {return args.reduce((argsDict, item) => {const [key = '', value] = item.split('=');return {...argsDict,[key.replace(/-/gi, '')]: value,};}, {});
}
const { env = '' } = getArgs(process.argv.slice(2));// 用于获取接口配置
const proxy = require('./proxy');const app = express();
const port = 8002; // 自定义端口号(不要与已存在端口冲突)// 转发所有接口服务
Object.keys(proxy[env]).forEach((route) => {app.use(route, createProxyMiddleware(proxy[env][route]));
});
// express.static创建dist静态资源服务器,在使用express.use可以进行托管
app.use(express.static(path.join(__dirname, '..', '/dist'))); // dist 是项目的打包资源路径,一般为根目录下distapp.get('/*', function (req, res) {res.type('text/html');res.sendFile(path.join(__dirname, '..', '/dist/index.html'));
});app.listen(port, () => {console.log('目前使用环境:', env);console.log(`服务器 ${port} 开启成功!`);
});
- 以上就可以根据不同环境做不同的接口转发啦
服务搭建插件介绍
下面是一些概念性的介绍感兴趣的可以看看
app.use介绍
app.use()可以用于加载第三方模块插件、定义路由、设置静态文件目录等。例如:
加载第三方中间件:可以使用app.use()来加载如body-parser等中间件,用于解析POST请求中的JSON或URL编码数据。
定义路由:通过app.use()可以定义处理特定路径的路由。例如,app.use(“/test”, (req, res) => { res.send(“测试成功!”) })会匹配所有以"/test"开头的请求。
设置静态文件目录:使用app.use(“/public”, express.static(path.join(__dirname, “./public”)))可以设置静态文件目录,使得静态文件可以直接通过URL访问。
http-proxy-middleware 介绍
http-proxy-middleware的主要作用是将客户端发送的请求转发到目标服务器,并将响应返回给客户端。它是一个代理中间件,广泛用于Node.js环境,特别是在开发环境中解决跨域问题,以及在生产环境中实现复杂的路由需求。
具体作用和应用场景
解决跨域问题: 在开发环境中,http-proxy-middleware可以通过代理服务器转发请求,使得浏览器请求的是本地路径,从而避免跨域问题。这使得开发者可以在本地环境中测试那些需要跨域请求的功能。
代理服务器功能:http-proxy-middleware可以作为一个代理服务器,将客户端的请求转发到目标服务器,并处理响应后返回给客户端。这一过程简化了HTTP请求的处理,使得服务器与客户端之间的连接、通信和同步变得更加轻松。
灵活的路由配置: 通过配置不同的路由规则,http-proxy-middleware可以根据请求的不同路径转发到不同的目标服务器。这使得在开发微服务架构的应用时,不同后端服务可以在同一前端应用中平滑地交互。
安全性增强:通过代理服务器转发请求,可以隐藏客户端的真实IP地址,提高网络安全性。此外,代理服务器还可以进行SSL证书验证,确保数据传输的安全性。
其他
想要深入了解服务相关内容,可以看看专业平台资料
express:
https://www.expressjs.com.cn/
http-proxy-middleware:
https://www.npmjs.com/package/http-proxy-middleware
path
https://nodejs.p2hp.com/api/v19/path/
相关文章:
前端快速搭建Node服务(解决跨域问题)
服务搭建应用场景 前端模块化基本成为了不可或缺的一步了,最近学习的时候,使用了EsModule语法,但使用import和export,会产生跨域问题,故自己本地搭建一个服务(不需要下载npm包),一步…...
三、0-1搭建springboot+vue3前后端分离-idea新建springboot项目
一、ideal新建项目1 ideal新建项目2 至此父项目就创建好了,下面创建多模块: 填好之后点击create 不删了,直接改包名,看自己喜欢 修改包名和启动类名: 打开ServiceApplication启动类,修改如下: …...
Unity光照之Halo组件
简介 Halo 组件 是一种用于在游戏中创建光晕效果的工具,主要用于模拟光源周围的发光区域(如太阳、灯泡等)或物体表面的光线反射扩散效果。 核心功能 1.光晕生成 Halo 组件会在光源或物体的周围生成一个圆形光晕,模拟光线在空气…...
电容与电感以及其典型的电路
一、电容与电感的基本关系 1. 定义公式 电容(C,单位:法拉F) C Q / V (电荷量Q与电压V的比值) 电感(L,单位:亨利H) L Φ / I (磁通链Φ与电流I…...
在昇腾GPU上部署DeepSeek大模型与OpenWebUI:从零到生产的完整指南
引言 随着国产AI芯片的快速发展,昇腾(Ascend)系列GPU凭借其高性能和兼容性,逐渐成为大模型部署的重要选择。本文将以昇腾300i为例,手把手教你如何部署DeepSeek大模型,并搭配OpenWebUI构建交互式界面。无论…...
递归专题刷题
文章目录 递归合并两个有序链表题解代码 反转链表题解代码 两两交换链表中的节点题解代码 Pow(x, n)(快速幂)题解代码汉诺塔题解代码 总结 递归 1. 重复的子问题宏观看待递归问题 合并两个有序链表 题目链接 题解 1. 重复的子问题 -> 函数头的设…...
电商项目-秒杀系统(四)秒杀异步下单防止重复秒杀
一、 防止恶意刷单解决 在生产场景下,可能会有一些人会恶意访问当前网站,来进行恶意的刷单。这样会造成当前系统出现一些业务上的业务混乱,出现脏数据,或者造成后端访问压力大等问题。 一般要解决这个问题的话,前端可…...
Android Studio 一直 Loading devices
https://stackoverflow.com/questions/71013971/android-studio-stuck-on-loading-devices...
摄相机标定的基本原理
【相机标定的基本原理与经验分享】https://www.bilibili.com/video/BV1eE411c7kr?vd_source7c2b5de7032bf3907543a7675013ce3a 相机模型: 定义: 内参:就像相机的“眼睛”。它描述了相机内部的特性,比如焦距(镜头的放…...
CentOS 7 安装 Redis6.2.6
获取资源、下载安装 Redis6.2.6 安装Redis6.2.6 上传到服务器或直接下载(wget http://download.redis.io/releases/redis-6.2.6.tar.gz)、再解压安装 tar -zxvf redis-6.2.6.tar.gz 进入redis解压目录 cd redis-6.2.6先编译 make再执行安装 make PREFI…...
在CentOS系统上安装Conda的详细指南
前言 Conda 是一个开源的包管理系统和环境管理系统,广泛应用于数据科学和机器学习领域。本文将详细介绍如何在 CentOS 系统上安装 Conda,帮助您快速搭建开发环境。 准备工作 在开始安装之前,请确保您的 CentOS 系统已经满足以下条件&#x…...
3D数字化:家居行业转型升级的关键驱动力
在科技日新月异的今天,家居行业正经历着一场前所未有的变革。从传统的线下实体店铺到线上电商平台的兴起,再到如今3D数字化营销的广泛应用,消费者的购物体验正在发生翻天覆地的变化。3D数字化营销不仅让购物变得更加智能和便捷,还…...
CSS—补充:CSS计数器、单位、@media媒体查询
目录 1. CSS计数器 嵌套计数器: 对列表元素: 2.单位 绝对长度: 相对长度: 3.media媒体查询 1. CSS计数器 CSS 计数器就像“变量”。变量值可以通过 CSS 规则递增(将跟踪它们的使用次数)。 如需使用…...
【JAVA架构师成长之路】【电商系统实战】第10集:电商秒杀系统实战(流量削峰 + 库存预热 + 请求排队)
30分钟课程:电商秒杀系统实战(流量削峰 库存预热 请求排队) 课程目标 掌握秒杀系统核心架构设计:流量削峰、库存预热、请求排队。实现基于 Redis 的令牌桶限流与库存原子扣减。通过 Redis List 或 Kafka 实现高并发请求的异步处…...
无人机推流/RTMP视频推拉流:EasyDSS无法卸载软件的原因及解决方法
视频推拉流/直播点播EasyDSS平台支持音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务,在应用场景中可实现视频直播、点播、转码、管理、录像、检索、时移回看等。此外,平台还支持用户自行上传视频文件,也可将上传的点播…...
Logisim实验--计组
每个实验会先讲一下原理再给出答案。 实验一:7段数码管驱动电路设计 实验目的 (1)帮助学生理解真值表方式设计电路的原理; (2)能利用Logisim的真值表生成电路功能自动生成所需电路。 这里我们要看清每个引脚控制的是哪个灯亮,注意看它的线…...
【Linux】软硬链接 | 动静态链接(三)
目录 前言: 一、软硬链接 1.软链接 2.硬链接 3.硬链接数 4.软硬链接的区别 5.使用unlink删除链接的文件 6.目录文件链接数( . 和 .. ) 二、静态库的制作和使用 1.制作静态库 2.使用静态库 2.1方法一 2.2方法二 2.3方法三 三、动态库的制作和使用 1.…...
数据结构(回顾)
数据结构(回顾) 回顾 不同点顺序表链表存储空间上物理上一定连续逻辑上连续,物理上不一定连续随机访问支持,时间复杂度O(1)不支持,时间复杂度O(N)任意位置插入或者删除元素可能需要挪动元素,效率低&#…...
达梦数据库在Linux,信创云 安装,备份,还原
(一)系统环境检查 1操作系统:确认使用的是国产麒麟操作系统,检查系统版本是否兼容达梦数据库 V8。可以通过以下命令查看系统版本: cat /etc/os-release 2硬件资源:确保服务器具备足够的硬件资源࿰…...
从0开始的操作系统手搓教程23:构建输入子系统——实现键盘驱动1——热身驱动
目录 所以,键盘是如何工作的 说一说我们的8042 输出缓冲区寄存器 状态寄存器 控制寄存器 动手! 注册中断 简单整个键盘驱动 Reference ScanCode Table 我们下一步就是准备进一步完善我们系统的交互性。基于这个,我们想到的第一个可以…...
01-简单几步!在Windows上用llama.cpp运行DeepSeek-R1模型
1.llama.cpp介绍 Llama.cpp 是一个开源的、轻量级的项目,旨在实现 Meta 推出的开源大语言模型 Llama 的推理(inference)。Llama 是 Meta 在 2023 年开源的一个 70B 参数的高质量大语言模型,而 llama.cpp 是一个用 C 实现的轻量化…...
Trae AI 开发工具使用手册
这篇手册将介绍 Trae 的基本功能、安装步骤以及使用方法,帮助开发者快速上手这款工具。 Trae AI 开发工具使用手册 Trae 是字节跳动于 2025 年推出的一款 AI 原生集成开发环境(IDE),旨在通过智能代码生成、上下文理解和自动化任务…...
HarmonyOS Next 属性动画和转场动画
HarmonyOS Next 属性动画和转场动画 在鸿蒙应用开发中,动画是提升用户体验的关键要素。通过巧妙运用动画,我们能让应用界面更加生动、交互更加流畅,从而吸引用户的注意力并增强其使用粘性。鸿蒙系统为开发者提供了丰富且强大的动画开发能力&…...
JavaWeb-mysql8版本安装
下载方式 地址:https://www.mysql.com/cn/downloads/ 选择:MySQL Community (GPL) downloads 选择:MySQL Community Server 选择: 选择: 安装mysql (8.0.30) 1、以管理员身份 打开 命令行…...
【实战ES】实战 Elasticsearch:快速上手与深度实践-3.2.3 案例:新闻搜索引擎的相关性优化
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 Elasticsearch新闻搜索引擎相关性优化实战3.2.3 案例:新闻搜索引擎的相关性优化项目背景1. 相关性问题诊断与分析1.1 初始查询DSL示例1.2 问题诊断矩阵1.3 性能基…...
HCIA复习拓扑实验
一.拓扑图 二.需求 1.学校内部的HTTP客户端可以正常通过域名www.baidu.com访问到百度网络中HTTP服务器 2.学校网络内部网段基于192.168.1.0/24划分,PC1可以正常访问3.3.3.0/24网段,但是PC2不允许 3.学校内部路由使用静态路由,R1和R2之间两…...
企业如何选择研发项目进度管理软件?盘点15款实用工具
这篇文章介绍了以下工具: 1. PingCode; 2. Worktile; 3. 腾讯 TAPD; 4. 华为 DevCloud; 5. 亿方云; 6. 阿里云效; 7. CODING 码云; 8. 明道云; 9. 进度猫; 10. 轻流等。 …...
(二 十 二)趣学设计模式 之 备忘录模式!
目录 一、 啥是备忘录模式?二、 为什么要用备忘录模式?三、 备忘录模式的实现方式四、 备忘录模式的优缺点五、 备忘录模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,…...
conda 配置新环境时package will be install 和 package will be download 的区别
install 和 download 的区别 package will be downloaded下的包:这一类显示的是需要从 conda 仓库或其他指定的源下载的软件包。这些软件包通常是 .tar.bz2、.tar.xz 或 .conda 格式的压缩包。这些包会被下载到本地缓存目录(通常是 ~/.conda 或 C:\Users…...
第本章:go 切片
注意: 切片必须要初始化 才能使用 ,切片是引用类型 a :[]int{} // 这上叫始化 此时并没有申请内存 // 如果要追加值的话: append ints : append(a, 1, 2, 3)a : make([]int,5) // 声明切片类型var a []string //声明一…...
