type
status
date
slug
summary
tags
category
icon
最开始是在哔哩哔哩上看到别人介绍的一个文件快递应用,可用于临时分享文件。我自己部署使用的时候遇到了一个对我而言非常明显的痛点-不能自定义分享码。因此才有了我这个FileBox应用

项目介绍
FileBox 是一个高效、易用、支持匿名分享文件的应用平台。该项目使用golang+react开发,数据库使用 sqlite3,项目构建完成以后,只有一个单一二进制文件,部署简单。
项目地址
如果各位看官姥爷觉得还不错,🙏求求帮忙点个小🌟🌟
功能特性
- 用户认证与授权
- 文件上传与管理
- 文件过期时间设置
- 下载次数限制
- 单一二进制文件部署
- 响应式前端界面
这就是花了半天时间开发出来的功能,目前看来功能和特性还比较单薄,管理功能几乎可以说没有,后期有可能会继续开发,增加新功能,也有可能就保持现状(取决于需求)。
开发过程
开发的整个过程中,交叉使用了 DeepSeek-R1、cursor claude-3.7-sonnet、github copilot 这三个AI大模型,其中 DeepSeek-R1 负责编写需求文档,claude 负责写代码,而 copilot 只在处理流水线时问了几个问题,但是它也没解决。
需求文档设计
这个项目90%以上的代码都是由 cursor 完成,我在新建了项目以后,使用 DeepSeek-R1 帮我写项目的需求文档,这是我对 DeepSeek-R1 的要求:
接下来是 DeepSeek-R1 给我的需求文档:
开发调试
在我的使用中,我发现使用AI,在它能获取到比较准确的反馈时,它的修改效果就会比较好,比如代码生成。但是在它不能获取准确反馈时,它的使用效果就很差,比如项目部署。
我将上述需求文档扔给 cursor,使用 agent 模式开始开发,cursor 自己一个人在那里自问自答开发了大概一个多小时。在代码生成完成以后,cursor 自己会尝试去调试,但是目前cursor在部署项目的时候问题还是比较多,因此当它尝试部署后端服务时,陷入了死胡同。
一开始的时候我都没注意,我在刷抖音,让它自己写代码,后来发现它一直在尝试重复部署,原本我是想尝试全程由AI来开发这个项目,但是这时候它陷入困境了,于是我就接手过来处理后端服务部署的问题。
实际上部署后端服务陷入死胡同的问题非常非常简单,我的项目前后端放在同一个仓库下,使用 backend 和 frontend 文件夹来进行区分,cursor默认在根目录,它一直找不到 main.go 文件入口,紧接着它就尝试在根目录生成 main.go,我一看这要坏事,就赶紧把它叫停,手动把服务启动起来。当然我手动尝试启动的时候,代码本身也出现了报错,但是基本都是小问题,把错误信息交给 cursor,它很快就能定位到错误并解决问题。
部署前端服务也是一样,AI 生成代码速度很快,功能开发的很快,但是它被困在前端服务启动这一步,cursor不停的尝试使用
npm run dev
,很多时候都是路径不对,又或者端口已经被占用(它自己会重复启动很多次,端口被占用就会换端口继续尝试),这导致我电脑启动了一堆的 node 进程。于是这里也由我接管过来,将前端开发环境也部署好,再让 cursor 继续。前后端都部署完成后,首页还是白屏,这时候把浏览器 console 中的报错交给 cursor,它很快就能把问题解决,功能也基本能正常使用。
最后在本地调试好,需要打包成为镜像,放在云上部署,这时候cursor的效果又开始变的比较差了,它靠自己的知识生成了流水线,生成了 Dockerfile,生成了 docker-compose.yml,但是它自己没有办法去获得反馈,它不知道生成出来的东西实际效果是怎样的。这中间的过程还是挺曲折的,折腾到最后,CI/CD这一块基本都是我接手过来,一步一步指导它要怎么做,这时候它才能比较好的完成任务。、
遇到的问题
在这里记录两个开发中非常常见的,同时也是非常简单的问题。
SPA应用路由404
在项目开发完成以后,访问首页可以正常响应,从首页跳转其它页面也可以正常跳转,但是如果使用链接直接访问某个页面,这时候页面会报错404.
单页应用的路由实际是由客户端来完成的跳转的,后端在路由的时候只处理了 / ,当用户访问首页时可以跳转到 index.html,但是如果访问 /user 去查看用户页面,由于后端没有处理路由,因此就会报错 404,所以这里需要在后端把 /* 都路由到 index.html,当然 /api 路径除外
后端 API proxy
FileBox 项目中使用 axios 来发送请求,因此在项目中有一个 client.ts 用于创建 client 实例,cursor 默认生成出来的后端地址是 localhost:8080,一旦我们不是在本地部署,即使部署在云服务器上,前端还是会向 localhost:8080 发送请求,这显然是不对的。如果说前后端是分离部署的,那么这里需要填后端地址,假如是部署在同一台机器,比如像我一样是一个二进制文件部署,这里应当使用相对路径。
打包
一开始的时候,我是想把前后端分开部署,前端放到 nginx 下,用 nginx 去驱动,然后我就发现了一个问题,假如放在同一个镜像里,那么 nginx 的端口应该要和后端的端口分开,要么就需要在 nginx.conf 中定义前后端的分流规则。当然问题都是可以解决的,但是在同一个镜像内同时启动两个服务,cursor 给我推荐的是使用supervisor去管理,这就导致另一个问题,应用的日志不能很直观的看到,我查看容器日志只能看到supervisor的启动日志,后端启动失败了,但是具体失败的原因是什么却不能直观的看出来。
于是我就选择把前端的静态文件打包进go生成的二进制文件里,这样项目更简单了,开发调试也更简单,部署也更简单。不需要考虑前后端的通信,一共就只有一个二进制文件,执行二进制文件就可以启动服务。
总结
cursor辅助开发确实非常强,在代码生成方面,给它明确的需求,它能非常快的完成你的要求,但是它擅长的场景需要它能够获得准确反馈才行,比如代码生成,文字生成,在生成完成以后,它可以准确的知道自己生成的效果,这样它才能知道怎么修改。在它不能获得准确反馈时,AI生成的效果就会大打折扣,它不知道是什么情况,只能靠真人给它描述现状,但是沟通的过程中,AI很容易理解有偏差,导致它给出的解决方案也不尽人意。
- 作者:阿杰鲁
- 链接:https://dddd.moe/article/1aa7d549-6f33-80ef-971c-f11f9dcd042b
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。