gpt4 book ai didi

javascript - 使用 NodeJS 的文件路径问题

转载 作者:太空宇宙 更新时间:2023-11-04 02:50:38 25 4
gpt4 key购买 nike

在下面的客户端代码中,我尝试显示与index.js和index.html位于同一目录中的图像(space.jpg)。当我访问服务器并提供index.html 时,图像显示链接已损坏。在提供静态 HTML 时,Node 的 native 文件结构是否存在我在此未考虑的情况?

我正在 OS X (10.10.5) 上的本地环境中进行测试。

我有以下服务器代码(index.js):

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

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

io.on('connection', function(socket){
console.log('a user connected');

socket.on('chat message', function(msg){
console.log('message: ' + msg);
io.emit('chat message', msg);
});

socket.on('disconnect', function(){
console.log('user disconnected');
});

});

http.listen(3000, function(){
console.log('listening on *:3000');
});

以及以下客户端代码 (index.html):

<!doctype html>
<html>
<head>
<title>Infinium</title>
<style>

</style>
</head>
<body>
<div id="chat" style="background-color:rgba(0,0,0,0.7);width:500px;top:0px;left:0px;position:absolute;">
<div style="width:500px;px;height:100px;overflow-y:auto;color:#FFFFFF" id="messages"></div>
<form action="">
<input id="m" autocomplete="off" /><button>Send</button>
</form>
</div>
<img src="space.jpg">

<script src="/socket.io/socket.io.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>
var socket = io();

$('form').submit(function(){
socket.emit('chat message', $('#m').val());
$('#m').val('');
return false;
});

socket.on('chat message', function(msg){
$('#messages').append($('<li>').text(msg));
var element = document.getElementById("messages");
element.scrollTop = element.scrollHeight;
});
</script>
</body>
</html>

最佳答案

您已经提供了index.html文件,但尚未在node.js代码中设置任何静态文件服务功能。

很少有 npm 软件包可以用于此目的,例如 node-static express-static 。如果您愿意,可以将其用作中间件。

在您的项目中安装其中任何一个:

$npm install express-static --save

然后你可以编辑你的index.js以使用express-static作为中间件。这将为项目根目录中/public 下的所有文件提供服务。因此,您可以将所有资源(即图像、CSS、客户端 JS)放在/public 目录中。

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

var static = require('express-static');
app.use(static(__dirname + '/public'));

在生产中,建议使用前端 http 服务器或反向代理(例如 nginxapache)来提供静态文件,因为 Node.js 不适合处理大型资源文件。

关于javascript - 使用 NodeJS 的文件路径问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41410565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com