2016-03-22 12 views
2

У меня недавно возникла проблема с тем, что я не понимаю, как работают пути для html в узле js. Я связываю свои сценарии index.html как обычно - относительно файла index.html (файл node.js и index.html находятся в одном каталоге «res.sendFile (__ dirname + '/index.html»); »). Но если я открою его в браузере, выполненном с узлом js, он просто установит «can not GET blabla» для скриптов. Вместо этого открывая его, просто нажав index.html без узла js, эти пути работают! Как мне написать html-пути для узла js?Узел JS - HTML-пути

var express = require('express'), 
    app = express(), 
    server = require('http').createServer(app), 
    io = require('socket.io').listen(server), 
    port = Number(process.env.PORT || 3000), 

server.listen(port); 

app.get('/', function(req, res){ 
    res.sendFile(__dirname + '/index.html'); 
}); 

Спасибо за ваше время! :)

+0

Этот код работает на моем компьютере, на самом деле. XD. возможно, что-то не так с разрешениями? – SCaffrey

ответ

2

Посмотрите на это:

app.get('/', function(req, res){ 
    res.sendFile(__dirname + '/index.html'); 
}); 

Вы сказали Node "Когда браузер запрашивает / дать ему index.html".

Что происходит, когда браузер запрашивает someScript.js?

Вы не сказали Node, что делать тогда.

(Вы, вероятно, захотите найти библиотеку для обслуживания статических файлов, а не для индивидуальной обработки каждого отдельно).

+0

Большое вам спасибо и приятный день! :) – dunnohowishouldnamemyself

0

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

var express = require('express'); 
 
var app = express(); 
 
var path = require('path'); 
 

 
// viewed at http://localhost:8080 
 
app.get('/', function(req, res) { 
 
    res.sendFile(path.join(__dirname + '/index.html')); 
 
}); 
 

 
app.listen(8080);

ExpressJS to Deliver HTML Files

Render HTML file in ExpressJS

0

Когда вы пишете:

app.get('/', function(req, res){ 
    res.sendFile(__dirname + '/index.html'); 
}); 

Он будет обслуживать только файл index.html, а не другие js-скрипты и таблицы стилей, которые вы добавили в свой html.

Есть 2 способа решения, что:

Для обоих из них, я бы предложил использовать модуль «путь».

Решение 1:

var path = require('path') 
app.get('/path/to/js/foo.js',function(req,res){ 
    res.sendFile(path.resolve(__dirname,'/path/to/js/foo.js') 
}) 
app.get('/path/to/css/bar.css',function(req,res){ 
    res.sendFile(path.resolve(__dirname,'/path/to/css/bar.css')) 
}) 

и так далее для каждого .css and.js файл, который вы добавили в вашем index.html.

Решение 2:

Вы можете создать общедоступный реж в корневой директории вашего проекта. Внутри все ваши файлы img, css и js будут там.

Далее

var path = require('path') 
app.use(express.static('public')) 
app.get('/',function(req,res){ 
    res.sendFile(path.resolve(__dirname,'/index.html') 
}) 
0

Вы можете использовать

app.use(express.static(path.join(__dirname, "folder-name")));