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

How do I switch from local host : 3000 to something ready for production in Flutter using dio?

我正在使用 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;
}

那个 Node Temp 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}`);
});

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

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