Я пытаюсь запустить сервер, выполняющий запросы HTTP и Websocket. HTTP-запросы будут использоваться для извлечения данных из локального файла с именем «geo-data.json», который мне нужен для отображения карты Нью-Йорка C с использованием D3. js и библиотеки topo json.
Я использую Node.js для запуска сервера. Мой файл package. json выглядит так:
{
"name": "inputusername_showlistofusers",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node server.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"node-geocoder": "^3.27.0",
"ws": "^7.3.0"
}
}
Моя конфигурация Websocket на стороне клиента выглядит так:
var wsUri = "ws://localhost:8080";
var ws = new WebSocket(wsUri);
ws.onopen = function (evt) {
console.log("1. Connected (from Client)")
}
ws.onmessage = function (message) {
var messageArray = JSON.parse(message.data)
console.log("5. This is the list of user names:", messageArray)
}
Кроме того, на стороне клиента я включаю свои Код D3 для чтения геоданных из файлов «geo-data.json» и «ny c -streets.json» с помощью D3. json:
d3.json('geo-data.json', function (error, data) {
//code
}
d3.json('nyc-streets.json', function (error, data) {
//code
}
на стороне сервера , Я использую веб-сокеты для трансляции сообщения. Код выглядит так:
var WebSocket = require("ws");
wss = new WebSocket.Server({ port: 8080 });
wss.on("connection", function connection(ws) {
console.log("2. Connected (from Server)")
ws.on("message", function incoming(message) {
console.log("3. received from the client ", message);
wss.clients.forEach(function each(client) {
if (client.readyState === WebSocket.OPEN) {
client.send(JSON.stringify(message));
console.log("7. All names connected: ", message)
}
})
})
})
Проблема: когда я запускаю server. js с использованием «node server.js», код (как на клиенте, так и на сервере), требующий Websocket, работает плавно, но тот, который требует https, не имеет:
d3.json('geo-data.json', function (error, data)
, и я получаю следующую ошибку (я открываю файл index. html с помощью File / Users…):
Доступ к XMLHttpRequest в 'file: /// Users ... "из источника' null 'заблокирован CORS policy: Запросы с перекрестным происхождением поддерживаются только для схем протоколов: http, data, chrome, chrome -extension, https.
Поэтому я попытался исправить это, используя http-сервер для запуска сервер, а также внесение следующего изменения в пакет. json: «scripts»: {start: «index.html»} Однако теперь код Websocket не работает, и я получаю следующую ошибку:
(индекс): 112 Соединение WebSocket с 'ws: // localhost: 8080 /' не удалось: Ошибка во время рукопожатия WebSocket: Неожиданный код ответа: 200
Как сделать как HTTP, так и Websocket запрашивает одновременно?
Заранее спасибо.