Хост-сервер NodeJS работает как с express, так и с Websocket, поэтому вы можете отправлять данные туда и обратно с помощью Flutter

#node.js #flutter #dart #heroku #websocket

Вопрос:

Хостинг сервера NodeJS на Heroku для меня совершенно новый. Поэтому теперь я хочу создать сервер на Heroku, который может отправлять данные туда и обратно вместе с Flutter. Дело в том, что я понятия не имею, какой адрес использовать или какой порт.

Это сервер индексирования, на котором, как вы можете, передаются данные туда и обратно. Это хорошо работает на локальном хостинге, но попробовать это на Heroku-другое дело.

index.js

 const WebSocket = require('ws');
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000; //port for Heroku that works fine

app.get('/', (req, res) => {
    res.sendFile(__dirname   '/lib/index.html');
});

app.listen(PORT, () => {
    console.log(`listening at: ${PORT}`)
});

var  webSockets = {}


const wss = new WebSocket.Server({ port: 6060 }) // Which port for Heroku?


wss.on('connection', function (ws, req)  {
        var userID = req.url.substr(1)
        console.log('User connected:', userID)
        webSockets[userID] = ws //add new user to the connection list
        ws.on('message', message => { //if there is any message
          console.log(message)
          ws.send("succes");
     }
}
 

Это функция flutter, которая используется для отправки и получения данных обычно с помощью localhost, она функционирует так, как должна, но Heroku отличается.

тест.дротик

 import 'package:web_socket_channel/io.dart';

// Changing this address to "ws://localhost:6060/user1" works completely fine on localhost
channel = IOWebSocketChannel.connect('ws://example.herokuapp.com:6060/user1');
String message = "{'cmd':'This message should be sended to Heroku'}";

channel.sink.add(message);

channel.stream.listen((message) async {
   print(message);
}
 

Ответ №1:

Если ваш бэкэнд независим, поэтому я не думаю, что вы используете flutter или ReactNative для интерфейса, это имеет большое значение.

Что касается heroku, у них есть довольно хорошие документы, которые вы можете прочитать здесь, также не забудьте добавить этот код в файл узла индекса

 if (process.env.NODE_ENV === "production") {
    //express will serve up production assest
    //like  our main.js or main.css files
    app.use(express.static("client/build"));

    //express will serve up index.js file if it doesn't recognizes the route
    const path = require("path");
    app.get("*", (req, res) => {
        res.sendFile(path.resolve(__dirname, "client", "build", "index.html"));
    });
}
 

также этот скрипт postbuild в разделе скрипты node.js package.json

 "heroku-postbuild": "NPM_CONFIG_PRODUCTION=false npm install --prefix client amp;amp; npm run build --prefix client"
 

Комментарии:

1. Спасибо за ваш ответ, но он не отвечает на мой вопрос

2. адрес будет » https://<имя_проекта_герока>.herokuapp.com` и для порта будет автоматически выбран heroku, так что вам не нужно беспокоиться об этом, просто используйте адрес, например, вместо <heroku_project_name> localhost:5000/login используйте https://<heroku_project_name>.herokuapp.com/login

3. Спасибо, это ответ, который мне был нужен, хорошего дня👏

4. Добро пожаловать! Хотя не могли бы вы уточнить мой ответ и отметить его как правильный? Это побуждает индивидуальных разработчиков, таких как я, помогать людям в дальнейшем