По сути, у вас есть сервер, который для любого данного запроса обслуживает содержимое вашего index.html
файла - независимо от того, как этот запрос может выглядеть.Поэтому браузер получает HTML-код и начинает его интерпретировать, отправляя другой запрос на src
вашего тега script
, и поскольку сервер обслуживает только ваш файл index.html
, браузер получает ваш HTML-файл во второй раз, когда он ожидает JavaScript.
Обычно вы сначала создаете сервер, а затем создаете ответы на основе запроса в качестве входных данных.Примитивный пример обслуживания ваших статических файлов так, как вы хотели, может выглядеть следующим образом:
const http = require('http')
const fs = require('fs')
const PORT = 8080
http
.createServer((request, response) => {
fs.readFile(`.${request.url}`, (err, data) => {
if (err) {
response.writeHeader(404, {
'Content-Type': 'text/plain'
})
response.write('404 Not Found')
response.end()
return
}
if (request.url.endsWith('.html')) {
response.writeHeader(200, {
'Content-Type': 'text/html'
})
}
if (request.url.endsWith('.js')) {
response.writeHeader(200, {
'Content-Type': 'application/javascript'
})
}
response.write(data)
response.end()
})
})
.listen(PORT)
Обратите внимание, что этот пример слишком доверяет клиенту, и вы, как правило, хотите каким-то образом санировать запрос.Я придерживался ванильного javascript, но как только вы освоитесь с тем, как он работает, стоит проверить Express , так как это упростит шаблон маршрутизации / mime-типа и т. Д.