无法从 Flutter Web 上的 localhost API(node js express)获取 http 请求的响应 [重复]

Posted

技术标签:

【中文标题】无法从 Flutter Web 上的 localhost API(node js express)获取 http 请求的响应 [重复]【英文标题】:Unable to get response from http request from a localhost API (node js express) on Flutter Web [duplicate] 【发布时间】:2021-11-08 11:58:52 【问题描述】:

我构建了一个简单的 api,它的响应主体为 "name": "saud", "age": "22"

它使用 Node js express 托管在 http://localhost:7283/saud

app.get('/saud',(req,res)=>res.status(200).send(name:'saud',age:'22') );

如果我从 (实体手机/失眠症/Chrome) 访问,但当我在 localhost 上托管我的 Web 应用程序 并且请求被发送。 我不断收到 CircularProgressIndicator(意味着将来没有响应)

这是我的颤振代码:

    Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(),
      body: SingleChildScrollView(
          child: FutureBuilder<http.Response>(
        future: getUrl(),
        builder: (context, snapshot) 
          if (snapshot.hasData) 
            print(json.decode(snapshot.data!.body));
            return Text(json.decode(snapshot.data!.body).toString());
          
          return CircularProgressIndicator();
        ,
      )),
    );
  

Future<http.Response> getUrl() async 
        return http.get(Uri.parse('http://192.168.92.226:7283/saud/'));
      

这个完全相同的代码非常适用于移动应用或失眠

insomnia poco x3 pro

network tab dev tools

【问题讨论】:

能否请您在开发者工具的网络选项卡中显示请求?可能是 cors 问题或类似问题。 @jeremynac 在 OP 中附上了截图 @jeremynac 这是一个 cors 问题,左上角的红色按钮显示了这一点:从源 '192.168.92.226:7283/saud' 访问 XMLHttpRequest 已被 CORS 策略阻止:否'访问-Control-Allow-Origin' 标头出现在请求的资源上。 【参考方案1】:

“CORS 策略:无 'Access-Control-Allow-Origin'”错误意味着后端正在阻止您的前端请求,因为它在与后端端口不同的端口上的 http://localhost 上运行。 要修复它,只需在后端使用 cors 包:

app.use(cors(
    origin: '*'
));

如果不工作:

app.use(cors(
    origin: 'http://localhost:<yourFlutterWebPort>'
));

如果仍然无法正常工作,您可以考虑使用代理或 http 隧道,例如 ngrok

【讨论】:

以上是关于无法从 Flutter Web 上的 localhost API(node js express)获取 http 请求的响应 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Web和Firebase身份验证TypeError:无法读取未定义的属性'app'

无法从 Flutter Web 读取 .txt 文件

Flutter web无法从firestore获取数据

Flutter web 无法从包中加载资产

如何从 Flutter Web 应用程序共享 S3 存储桶上的图像?

无法使用 HttpClient 从 Flutter Web 发布