V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Jesmora
V2EX  ›  Node.js

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

  •  
  •   Jesmora · 88 天前 · 1692 次点击
    这是一个创建于 88 天前的主题,其中的信息可能已经有所发展或是发生改变。

    什么是 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  
       45 天前
    看作者一直在更新,关注下!
    Jesmora
        2
    Jesmora  
    OP
       27 天前
    @gesse 感谢关注
    dsggnbsp
        3
    dsggnbsp  
       20 天前
    dsggnbsp
        4
    dsggnbsp  
       20 天前
    @dsggnbsp "message": "Route GET:/apiqjs not found",
    Jesmora
        5
    Jesmora  
    OP
       17 天前
    @dsggnbsp 你是如何创建 functions 里面的文件的,如果你要访问 apiqjs ,那应该文件名为:apiqjs.mjs
    Jesmora
        6
    Jesmora  
    OP
       17 天前
    @dsggnbsp 还应该注意你的 QJS_PREFIX ,看你的错误,我猜测你应该是要访问/api/qjs ,而不是 apiqjs
    dsggnbsp
        7
    dsggnbsp  
       11 天前
    @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
       11 天前
    @dsggnbsp 感谢,确实是 window 环境导致
    Jesmora
        9
    Jesmora  
    OP
       11 天前
    @dsggnbsp 已修复 window 平台错误
    dsggnbsp
        10
    dsggnbsp  
       10 天前
    @Jesmora #9 可以了 大佬加油
    dsggnbsp
        11
    dsggnbsp  
       10 天前
    @Jesmora #9 但是接口返回的 url 似乎有点瑕疵
    Jesmora
        12
    Jesmora  
    OP
       8 天前
    @dsggnbsp 收到,感谢
    Jesmora
        13
    Jesmora  
    OP
       8 天前
    @dsggnbsp 修复了,windows 环境没有 unix 那么直接😂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2728 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:24 · PVG 22:24 · LAX 06:24 · JFK 09:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.