#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. Добро пожаловать! Хотя не могли бы вы уточнить мой ответ и отметить его как правильный? Это побуждает индивидуальных разработчиков, таких как я, помогать людям в дальнейшем