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

3okqufwl  于 2023-06-29  发布在  Node.js
关注(0)|答案(3)|浏览(269)

我对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的内容。
再次,如果这个问题是愚蠢的,我很抱歉,但我被卡住了,不知道该去哪里看。
谢谢!

avwztpqn

avwztpqn1#

node.js中的Web服务器默认不提供任何文件(与其他一些Web服务器不同)。所以,如果你想让js文件被服务,你必须定义一个web服务器路由来服务它们。您所展示的代码为进入该http服务器的所有传入请求返回index.html,因此,当/js/script.js请求进入时,您的web服务器发送index.html应该不足为奇。
使用node.js进行Web服务的典型框架是Express,它具有express.static(),可用于定义一个路由,该路由将覆盖所有静态文件或特定目录中的所有文件。当然,您可以编写自己的静态文件处理代码,或者也可以找到其他模块来执行此操作。关键是您必须编写或配置一些代码来为静态资源文件提供服务。这不是node.js http服务器自动为您完成的。

nbewdwxp

nbewdwxp2#

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

对于静态文件,如css,图像,你可以使用 public 目录,你可以提供你的自定义目录,* 但 * 最好使用public**,同样适用于视图 *
总是要求
const PATH = require('path')

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

对于模板文件,如.ejs, .html, .jade使用

app.set('views', PATH.join(__dirname, 'views'));
vdgimpew

vdgimpew3#

我用了这个。

app.use('/main/static', express.static(path.join(__dirname, 'public')));

“main”是node js selector中定义的默认URI。这解决了我的问题

相关问题