2 分钟完成文件上传接口, 3 分钟完成一个 CURD 接口,轻量框架 fast-qjs(开源) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Jesmora
V2EX    Node.js

2 分钟完成文件上传接口, 3 分钟完成一个 CURD 接口,轻量框架 fast-qjs(开源)

  •  
  •   Jesmora 2024-09-30 14:50:04 +08:00 2350 次点击
    这是一个创建于 375 天前的主题,其中的信息可能已经有所发展或是发生改变。

    什么是 fast-qjs ?它能做什么? fast-qjs 是一个基于 fastify 框架使用约定式进行路由约束的轻量框架,完全继承 fastfiy 的优点,当你想要快速实现一个功能模块的 crud ,那么 fast-qjs 就能让你在 10 分钟以内完成

    fast-qjs 优点:

    1. 内置数据库:无需繁琐的数据库配置,即可直接使用。
    2. 集成 JWT:方便且安全的用户身份验证功能。
    3. 便捷的文件上传接口:轻松处理文件,自动化存储管理。
    4. 公共目录支持:提供静态资源的管理和访问。
    5. 约定式路由管理:简洁的路由设置,高效的资源调度。

    项目地址fast-qjs

    下面以 fast-qjs 提供的files接口进行一个案例

    第一步,确保已经安装了nodejs,终端运行:

    npx create-qjs qjs-app 

    执行成功你将看到如下项目结构

    qjs-app/ ├── node_modules/ # 依赖包目录 │ ├── package.json # 项目配置文件 │ ├── package-lock.json # 依赖版本信息 

    紧接着执行下面的命令

    cd qjs-app && npm run start 

    执行完你将看到如下结构

    qjs-app/ │ ├── db/ │ ├── functions/ │ ├── public/ │ ├── node_modules/ │ ├── package.json │ ├── package-lock.json 

    现在进入functions目录,你将看到一个默认的qjs.mjs文件,根据终端提示你的项目运行在http://localhost:5173。紧接着你的 api 已经创建,浏览器访问 http://localhost:5173/api/qjs 你将看 qjs.mjs 默认插入数据库的信息

    我们打开qjs.mjs文件你将看到如下信息:

    // functions/qjs.mjs // @see https://github.com/allmors/qjs/ // import qjs from '@allmors/qjs/core'; export default async function (params, ctx) { // const User = await qjs.db.collection('user'); // const user = await User.insertOne({ name: "Sam", email: '[email protected]' }) // or const User = await this.db.collection('user'); const user = await User.insertOne({ name: "Sam", email: '[email protected]' }) // ...... return ctx.reply.send({ message: 'Hello from qjs API', method: context.method, params: { ...user } }); } 

    默认代码不用管,直接粘贴下面代码全部替换

    export default async function (params, ctx) { try { const { file } = params let result = {} if (ctx.method === 'POST') { const res = await this.files.upload(file) result = res } return ctx.reply.send({ message: 'Hello from qjs API', method: ctx.method, result: result }); } catch (error) { throw new Error(error) } } 

    现在打开 apifox 或者其它工具,我以 apifox 为例

    现在你的文件上传接口已经开发完成,回到你的项目目录你将会看到uploads,里面就是你上传的文件,你可用通过 nginx 获取 caddy 反代该目录即可访问你的文件,当然了,如果你不想这么麻烦,那么,修改 package.json 中如下配置:

    找到QJS_STATIC,把QJS_STATIC修改为uploads即可,然后访问:http:0.0.0.0:5173/public/你的 uploads 目录里面的文件名

    比如:http://0.0.0.0:5173/public/61f1adee-08ea-45-1727658693615/deKGMl9.jpg


    更多信息请查阅文档fast-qjs

    13 条回复    2024-12-19 09:29:40 +08:00
    gesse
        1
    gesse  
       332 天前
    看作者一直在更新,关注下!
    dsggnbsp
        3
    dsggnbsp  
       307 天前
    dsggnbsp
        4
    dsggnbsp  
       307 天前
    @dsggnbsp "message": "Route GET:/apiqjs not found",
    Jesmora
        5
    Jesmora  
    OP
       304 天前
    @dsggnbsp 你是如何创建 functions 里面的文件的,如果你要访问 apiqjs ,那应该文件名为:apiqjs.mjs
    Jesmora
        6
    Jesmora  
    OP
       304 天前
    @dsggnbsp 还应该注意你的 QJS_PREFIX ,看你的错误,我猜测你应该是要访问/api/qjs ,而不是 apiqjs
    dsggnbsp
        7
    dsggnbsp  
       298 天前
    @Jesmora #6 我觉得应该是 win 的报错 我比较笨 就没研究了
    run start 之后
    code: 'ERR_UNSUPPORTED_ESM_URL_SCHEME'


    Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only URLs with a scheme in: file, data, and node are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
    Jesmora
        8
    Jesmora  
    OP
       298 天前
    @dsggnbsp 感谢,确实是 window 环境导致
    Jesmora
        9
    Jesmora  
    OP
       298 天前
    @dsggnbsp 已修复 window 平台错误
    dsggnbsp
        10
    dsggnbsp  
       297 天前
    @Jesmora #9 可以了 大佬加油
    dsggnbsp
        11
    dsggnbsp  
       297 天前
    @Jesmora #9 但是接口返回的 url 似乎有点瑕疵
    Jesmora
        12
    Jesmora  
    OP
       296 天前
    @dsggnbsp 收到,感谢
    Jesmora
        13
    Jesmora  
    OP
       295 天前
    @dsggnbsp 修复了,windows 环境没有 unix 那么直接
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     884 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 21:19 PVG 05:19 LAX 14:19 JFK 17:19
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86