alovajs / alova

Workflow-Streamlined next-generation request tools. Extremely streamline API integration workflow, just one step
https://alova.js.org
MIT License
2.9k stars 103 forks source link

[Feature Request]alova支持服务端渲染(SSR) #51

Closed smallCF closed 1 year ago

smallCF commented 1 year ago

Reproduction Link

//这是一个alova的封装库
alova.ts
import { createAlova,useRequest } from 'alova';
import GlobalFetch from 'alova/GlobalFetch';
import VueHook from 'alova/vue';

const alovaInstance = createAlova({
    baseURL:'/',
    timeout:1000 * 30,
    // vue项目传入VueHook,react项目传入ReactHook
    statesHook:VueHook,
    // 传一个请求适配器,GlobalFetch是我们提供的fetch api适配器
    requestAdapter: GlobalFetch(),
    // 请求拦截器
    beforeRequest(config) {
        console.log(config)
        // config.headers.token = '这里是测试token';
    },
    responsed:{
        // 请求成功的拦截器
        // 当使用GlobalFetch请求适配器时,第一个参数接收Response对象
        // 第二个参数为当前请求的method实例,你可以用它同步请求前后的配置信息
        onSuccess: async (response, method) => {
            if (response.status >= 400) {
                throw new Error(response.statusText);
            }
            const json = await response.json();
            if (json.code !== 200) {
                // 抛出错误或返回reject状态的Promise实例时,此请求将抛出错误
                throw new Error(json.message);
            }

            // 解析的响应数据将传给method实例的transformData钩子函数,这些函数将在后续讲解
            return json.data;
        },

        // 请求失败的拦截器
        // 请求错误时将会进入该拦截器。
        // 第二个参数为当前请求的method实例,你可以用它同步请求前后的配置信息
        onError: (err, method) => {
            alert(err.message);
        }
    }
})
export default alovaInstance
//这是一个调用库
about.ts
import { useRequest } from 'alova';
import alovaInstance from '@/api/alova'

export const testSend = (data:object)=>{
    return useRequest(
        alovaInstance.Get('https://api.alovajs.org/profile', {
          params: {
            id: 1
          }
        })
    )
}
//这是一个调用库

alova Version

2.1.1

Describe the Bug

在 vite + vue3里面使用会报错 并且在ssr渲染模式下面,会编译失败,并不能找到 import.mate

Reproduce Steps

使用 ssr + vite + vue3 的编译模式会错误

alova doesn't appear to be written in CJS, but also doesn't appear to be a valid ES module (i.e. it doesn't have "type": "module" or an .mjs extension for the entry point). Please contact the package author to fix. Alova似乎并未写在CJS中,但似乎并不是有效的ES模块(即它没有“类型”:“模块”或输入点的.MJS扩展名)。请联系包裹作者修复。

Device / Browser / Browser Version

No response

JOU-amjs commented 1 year ago

非常感谢你的反馈😃 其实ssr是有考虑在特性内的,只是目前还没有支持, Screenshot_2023-04-19-18-42-44-395_com android browser

如果你需要,我打算在一周内支持下ssr特性。

smallCF commented 1 year ago

如果能支持,将会是极好的,如若时间上不行,希望后续版本能支持,非常感谢作者的支持

JOU-amjs commented 1 year ago

😁有人需要,并且符合alova发展方向的功能,我们就可以优先支持下

JOU-amjs commented 1 year ago

:tada: This issue has been resolved in version 2.2.0 :tada:

The release is available on:

Your semantic-release bot :package::rocket:

JOU-amjs commented 1 year ago

alova SSR已经在2.2.0可用了!😎

smallCF commented 1 year ago

好的,感谢作者的支持

JOU-amjs commented 1 year ago

:tada: This issue has been resolved in version 2.3.0 :tada:

The release is available on:

Your semantic-release bot :package::rocket:

bili-jing commented 11 months ago

可以在next 的app router中使用吗

JOU-amjs commented 11 months ago

可以在next 的app router中使用吗

可以的。https://alova.js.org/zh-CN/tutorial/next-step/ssr