使用NodeJS服务器时无法加载本地文件

时间:2017-01-14 23:41:46

标签: node.js

我对NodeJS很陌生,我现在正在玩它(和websockets),所以这个问题可能有点愚蠢。无论如何,我正在按照一个教程给我一个包含以下内容的简单app.js:

var fs = require('fs')
, http = require('http')
, socketio = require('socket.io');

var server = http.createServer(function(req, res) {
    res.writeHead(200, { 'Content-type': 'text/html'});
    res.end(fs.readFileSync(__dirname + '/index.html'));
}).listen(8080, function() {
    console.log('Listening at: http://localhost:8080');
});

socketio.listen(server).on('connection', function (socket) {
    socket.on('message', function (msg) {
        console.log('Message Received: ', msg);
        socket.broadcast.emit('message', msg);
    });
});

在我的index.html中,我试图加载一些js和css文件,但我似乎无法加载它们。这些文件位于js文件夹中,该文件夹与我的app.js和index.html位于同一目录中,我试图像这样加载它们:

<script src="/js/script.js"></script>

如果我在浏览器中查看请求的响应,则会返回index.html的内容。

再次,抱歉,如果这个问题很愚蠢,但是我被困住了,并且不知道在哪里看。

谢谢!

2 个答案:

答案 0 :(得分:5)

默认情况下,node.js中的Web服务器不提供任何文件(与其他一些Web服务器不同)。因此,如果您希望提供js文件,则必须定义将为其提供服务的Web服务器路由。对于进入该http服务器的所有传入请求,您显示的代码都会返回index.html,因此,当/js/script.js的请求进入时,您的Web服务器会发送index.html,这一点不应该令人感到惊讶。

与node.js一起用于Web服务的典型框架是Express,它具有express.static(),可用于定义覆盖所有静态文件或特定目录中所有文件的路由。当然,您可以编写自己的静态文件处理代码,或者找一些其他模块来执行此操作。关键是您必须编写或配置一些代码来为静态资源文件提供服务。 node.js http服务器不会自动执行此操作。

答案 1 :(得分:1)

您可以指定服务器在哪个文件夹中查找

用于静态文件,例如css,您可以使用的图像     公共目录,您可以提供自定义目录, 最好使用公共,同样适用于视图

始终需要

const PATH = require('path')

app.use(express.static(PATH.join(__dirname, 'public')));

用于.ejs, .html, .jade使用

等模板文件
app.set('views', PATH.join(__dirname, 'views'));