我对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的内容。
再次,抱歉,如果这个问题很愚蠢,但是我被困住了,并且不知道在哪里看。
谢谢!
答案 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'));