背景最近使用Nginx部署Vue项目时,发现页面不是根路由(/)的情况下会出现404的情况,网上搜寻了一下解决方法,原来是由于Vue单页面开发特性导致的,这里记录一下解决方法。方案只需要在Nginx配置中添加以下内容即可:location / { try_files $uri $uri/ @router; index index.html index.htm; } location @router { rewrite ^.*$ /index.html last; }在1panel的配置server { listen 80 ; listen 443 ssl http2 ; server_name ***; index index.php index.html index.htm default.php default.htm default.html; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_for
业务上碰到一个需求,用户在已经发布的web中自制vue3组件,还需要接收web在运行时产生的数据并渲染定制的页面。在最初学习vue的时候学的是vue2,当时直接在script中new Vue()以达到使用vue的功能,后来逐渐接触项目工程化,借助npm、yarn、vite直接来创建项目,渐渐忘记了vue最初的模样。经过一段时间摸索,vue3也能够实现此方法。项目背景给用户一个代码编辑页面,分别可以编辑template、js和css,然后在需要展示的地方再对用户编写的组件进行渲染。实现思路正常开发一个vue网页的流程为,使用cli创建项目、编写代码、编译最后发布,而编译这一步就会将代码编译为不需要vue也能够运行的普通代码,而用户编写的肯定不能使用这个流程,不然每次用户写完就要重新编译发布,并且用户所编写的代码文件也是存储在数据库中的,这显然不适合。前端从数据库拿到用户所写的js文件,肯定是不能直接运行的,第一步就是将字符串格式的js代码转为js对象,然后再运行。当然,转为js对象后也不能直接运行,因为本地编写的代码在编译后就没有Vue这个环境了,直接调用new Vue()方法是行不通的
使用kratos自带http transport实现文件下载上传功能,并且可以使用中间件。文件的下载接口可以使用proto定义,上传目前还未找到完美方法,为了统一,采用不定义在proto中定义,自行在server中实现。为什么上传接口不能使用proto定义?上传接口实际上可以使用proto定义,但是在解析入参时是不能解析上传的字节类型,入参的Content-Type类型只支持: x-www-form-urlencoded、json、xml、proto、yaml,而上传文件我希望以只读字节流readCloser的方式,这样可以方便使用io.Copy()的方式实现上传,而不是将文件数据转换成[]byte进行传输看一段官方的实现方式原代码 · GitHub,已简化。func downloadFile(ctx http.Context) error { f := excelize.NewFile() return f.Write(ctx.Response()) } func main() { var opts = []http.ServerOption{
准备工作一台拥有公网 IP 的服务器一个域名服务器准备工作安装 Golang ,版本最好为1.20以上安装Caddy2进入网站了解安装方式:caddy2中文网Caddyfile配置caddy的作用仅用于申请tls证书证书目录:/var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/example.comexample.com { tls 邮箱 respond "Hello, world!" } }安装 tailscalecurl -fsSL https://tailscale.com/install.sh | sh启动并登录tailscale up安装 derper 服务go install tailscale.com/cmd/derper@main配置derper service[Unit] Description=derper service After=network.target StartLimitIntervalSec=0 [
openwrt 是针对于嵌入式设备的精简版 Linux 系统。所以一些常规的 Linux 服务都没有,比如 systemd 等。openwrt 是通过 init.d 来管理服务的。所有的服务都在 /etc/init.d 目录下。对某个服务进行操作也很方便,例如对 network 服务:# 启动 network /etc/init.d/network start # 重启 network /etc/init.d/network restart # 停止 network /etc/init.d/network stop如果需要某个服务开机自启动,可以 enable:/etc/init.d/frp enable会自动在 /etc/rc.d/ 目录下建立一个链接指向 /etc/init.d 下的对应服务,如:S95frp。S95 表示此服务的启动顺序,下面会做介绍。基本结构script 配置文件基本结构如下:#!/bin/sh /etc/rc.common USE_PROCD=1 START=95 STOP=15 start_service() { } service_triggers