静态文件,带有 Node.js 和 Express 的样式表

Posted

技术标签:

【中文标题】静态文件,带有 Node.js 和 Express 的样式表【英文标题】:Static file, stylesheet with Node.js and Express 【发布时间】:2014-03-16 23:14:52 【问题描述】:

我是 Nodejs 的新手,我无法让我的样式表(和 js 文件)与我的 Node.js 服务器一起工作。我尝试了很多东西,但没有任何效果。请问你能帮帮我吗 ? 我的样式表位于“公共”文件夹中。

Server-side : 
    var http = require('http');
    var fs = require('fs');
    var express = require('express');
    var path = require('path');

var app = express();
// Chargement du fichier index.html affiché au client
var server = http.createServer(function(req, res) 
    fs.readFile('./index.html', 'utf-8', function(error, content) 
        res.writeHead(200, "Content-Type": "text/html");
        res.end(content);
    );
);

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

// Chargement de socket.io
var io = require('socket.io').listen(server);

io.sockets.on('connection', function (socket, pseudo) 
    // Quand on client se connecte, on lui envoie un message
    socket.emit('message', 'Vous êtes bien connecté !');
    // On signale aux autres clients qu'il y a un nouveau venu
    socket.broadcast.emit('message', 'Un autre client vient de se connecter ! ');

    // Dès qu'on nous donne un pseudo, on le stocke en variable de session
    socket.on('petit_nouveau', function(pseudo) 
        socket.set('pseudo', pseudo);
    );

    // Dès qu'on reçoit un "message" (clic sur le bouton), on le note dans la console
    socket.on('message', function (message) 
        // On récupère le pseudo de celui qui a cliqué dans les variables de session
        socket.get('pseudo', function (error, pseudo) 
            console.log(pseudo + ' me parle ! Il me dit : ' + message);
        );
    ); 
);
server.listen(8080);

客户端:

<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="utf-8">
  <title>Chat par navigateur</title>
  <link rel="stylesheet" href="public/css/stylesheet.css">
  <!-- <link rel="icon" type="image/png" href="img/favicon.png" /> -->
</head>
<body>
    <h1>SALUTATIONS</h1>
    <p><input type="button" value="Parler au serveur" id="poke" /></p>

    <!-- <script type="text/javascript" src="js/jQuery.js"></script> -->
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <script type="text/javascript" src="/socket.io/socket.io.js"></script>
    <script>
        var socket = io.connect('http://localhost:8080');
        socket.on('message', function(message) 
            alert('Le serveur a un message pour vous : ' + message);
        )

        $('#poke').click(function () 
            alert("ok");
            socket.emit('message', 'Salut serveur, ça va ?');
        )
    </script>
</body>
</html>

【问题讨论】:

这是整个代码吗?提供静态文件/样式表的代码在哪里? 是的,这是整个代码。不是“app.use(express.static(path.join(__dirname, 'public')));” ?或者也许我错过了一些东西.. 是的,我没有注意到那行代码,当您尝试浏览 localhost url 时,express 会记录任何内容吗? 嗯,我只是在控制台中有这个:“信息 - socket.io 开始调试 - 提供静态内容 /socket.io.js 调试 - 客户端授权信息 - 握手授权 LxFKCDd3_g8Q4P_5Qnek 调试 - 设置请求 GET / socket.io/1/websocket/LxFKCDd3_g8Q4P_5Qnek 调试 - 为客户端设置心跳间隔 LxFKCDd3_g8Q4P_5Qnek 调试 - 客户端授权调试 - websocket 写入 1:: 调试 - websocket 写入 5:::"name":"message","args": ["Vous êtes bien conne cté !"] 调试 - 广播数据包" 【参考方案1】:

如果您使用的是 Express 3.x,请尝试以下操作:

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

var app = express();
app.get('/', function(req, res) 
  res.sendfile('/index.html');
);
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

var server = http.createServer(app);

var io = require('socket.io').listen(server);

/* Your socket event handlers are here.*/

server.listen(8080);

【讨论】:

我试过了,但现在在 localhost 页面上写着“Cannot GET /” @Hornlame 更新代码以添加路由处理程序。 现在我有“GET localhost:8080/public/css/stylesheet.css404(未找到)”,我在本地工作,这是我无法解决的问题(因为公用文件夹在我的硬盘中).. index.html 中,将&lt;link rel="stylesheet" href="public/css/stylesheet.css"&gt; 更改为&lt;link rel="stylesheet" href="/css/stylesheet.css"&gt; 非常感谢,它成功了!现在可以试试Node了,以后会研究express的东西。

以上是关于静态文件,带有 Node.js 和 Express 的样式表的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 公共静态文件夹,用于为 js 提供 utf-8 字符集

使用 Node JS / Express 提供包含图像的静态 HTML 页面

使用 express 的 Node.js 中的静态路由问题

Express (RoutingMiddleware托管静态文件view engine 等等)

node.js 11 Web框架Express 介绍,安装,静态页面,路由

详解express搭建http服务,通过路由和中间件获取静态文件和动态数据的实现原理