如何使用 dio 从本地主机:3000 切换到准备在 Flutter 中生产的东西?

Posted

技术标签:

【中文标题】如何使用 dio 从本地主机:3000 切换到准备在 Flutter 中生产的东西?【英文标题】:How do I switch from local host : 3000 to something ready for production in Flutter using dio? 【发布时间】:2021-10-11 04:42:19 【问题描述】:

我正在使用 dio 发出网络请求。在测试阶段,我使用本地主机端口 3000。我使用 javascript 文件和节点在测试模式下运行它。我会简单地在 javascript 文件上运行节点,它会启动端口,它会工作。这很棒,但是每当我在真实设备上运行它时,它都不起作用。所以我假设我需要将其更改为其他内容以发布...?我是新来的。任何建议或指导都会有所帮助,谢谢。

const muxServerUrl = 'http://localhost:3000';


 initializeDio() 
    BaseOptions options = BaseOptions(
      baseUrl: muxServerUrl,
      connectTimeout: 8000,
      receiveTimeout: 5000,
      headers: 
        "Content-Type": contentType, // application/json
      ,
    );
    _dio = Dio(options);
  

实施

late Response response;
try 

  // print(response);
  response = await _dio.post(
    "/assets",
    data: 
      "videoUrl": videoUrl,
    ,
  );
 catch (e) 
    print('ran 2');

  throw Exception('Failed to store video on MUX');


if (response.statusCode == 200) 
    print('ran 4');
  VideoData videoData = VideoData.fromJson(response.data);

  String status = videoData.data!.status;

  while (status == 'preparing') 
  
    await Future.delayed(Duration(seconds: 1));
    videoData = (await checkPostStatus(videoId: videoData.data!.id))!;
    status = videoData.data!.status;
  

  print('Video READY, id: $videoData.data!.id');

  return videoData;

那个节点临时 JS 文件

require("dotenv").config();
const express = require("express");
const bodyParser = require("body-parser");
const Mux = require("@mux/mux-node");
const  Video  = new Mux(
  process.env.MUX_TOKEN_ID,
  process.env.MUX_TOKEN_SECRET
);
const app = express();
const port = 3000;

var jsonParser = bodyParser.json();

app.post("/assets", jsonParser, async (req, res) => 
  console.log("BODY: " + req.body.videoUrl);

  const asset = await Video.Assets.create(
    input: req.body.videoUrl,
    playback_policy: "public",
  );

  res.json(
    data: 
      id: asset.id,
      status: asset.status,
      playback_ids: asset.playback_ids,
      created_at: asset.created_at,
    ,
  );
);

app.get("/assets", async (req, res) => 
  const assets = await Video.Assets.list();

  res.json(
    data: assets.map((asset) => (
      id: asset.id,
      status: asset.status,
      playback_ids: asset.playback_ids,
      created_at: asset.created_at,
      duration: asset.duration,
      max_stored_resolution: asset.max_stored_resolution,
      max_stored_frame_rate: asset.max_stored_frame_rate,
      aspect_ratio: asset.aspect_ratio,
    )),
  );
);

app.get("/asset", async (req, res) => 
  let videoId = req.query.videoId;
  const asset = await Video.Assets.get(videoId);

  console.log(asset);

  res.json(
    data: 
      id: asset.id,
      status: asset.status,
      playback_ids: asset.playback_ids,
      created_at: asset.created_at,
      duration: asset.duration,
      max_stored_resolution: asset.max_stored_resolution,
      max_stored_frame_rate: asset.max_stored_frame_rate,
      aspect_ratio: asset.aspect_ratio,
    ,
  );
);

app.listen(port, () => 
  console.log(`Mux API listening on port $port`);
);

【问题讨论】:

【参考方案1】:

localhost 是所谓的环回地址,它之所以有效,是因为您正在机器上运行应用程序。当您发布应用程序时,您必须在某个服务器中托管您的 Nodejs 应用程序并使用该服务器的 IP 地址。在您托管该应用之前,我鼓励您花更多时间确保它的安全。

如果您只想在 android 模拟器上运行应用程序,您可以使用 10.0.2.2 来访问主机环回

【讨论】:

好的,我目前正在使用名为 host stinger 的服务。所以当我给它它的网址时。会不会是 main.js。我肯定会更多地关注安全性,谢谢。 当您说服务时,您是指云托管吗?由于您使用的是 Nodejs,您只需要在 VPS 中运行您的应用程序并将端口更改为 80,您需要设置认证,还有什么,但您可以查看。 好的,谢谢你,我想我有你所说的服务。它有内存、内核和运行文件。所以我认为这符合虚拟机的所有标准。 polaristech.tech/files/mux/mux-api-server 是它们所在的位置,所以如果我将其用作我的 url,它会说它已连接,但它不会运行需要 api 的操作 不,您应该删除该链接。您不提供您的 javascript 文件。在 Nodejs 中,javascript 在服务器上运行。您只需要 ssh 进入该 vps 并运行您的 node 应用程序,然后在更改为端口 80 后使用该 ip 地址。您需要查找 Nodejs 部署。

以上是关于如何使用 dio 从本地主机:3000 切换到准备在 Flutter 中生产的东西?的主要内容,如果未能解决你的问题,请参考以下文章

Ngrok > Nginx > 本地主机端口

从本地主机获取 Json [重复]

如何更改 React App 的默认本地主机端口 [重复]

如何在 iFrame 上使用 postMessage

本地主机中的 NoMethodError:3000

ngrok - 获取到本地主机服务器的所有路由