使用 nodejs 和 express 读取 css/js 个文件

Read css/js files with nodejs and express

关于 nodejs,我是一个真正的菜鸟,几天前才开始的。我不明白为什么我的 js 和 css 文件没有被应用。没有 404 错误,所以看起来不是这样。我正在尝试使用 express 读取文件。我在开发工具中收到这些控制台错误:

GamblerScript.js:1 未捕获的语法错误:意外的标记 <

jquery-2.2.0.min.js:1 未捕获的语法错误:意外的标记 <

localhost/:5 资源解释为样式表但使用 MIME 类型传输 text/html:“http://localhost:8080/css/Stylesheet.css”。

(index):9 Uncaught ReferenceError: 运行 未定义

有谁能看出我做错了什么吗?

var http = require('http');
var fs = require('fs');
var index = fs.readFileSync('index.html');
var express = require('express');
var app = express();

app.get('/', function(req, res) {
  res.sendfile('/index.html');
});
app.use(express.static(__dirname + '/public'));

fs.readFile('./index.html', function (err, html) {
    if (err) {
        throw err; 
    }       
    http.createServer(function(request, response) {  
        response.writeHeader(200, {"Content-Type": "text/html"});  
        response.write(html);  
        response.end();  
    }).listen(8080);
});
<html lang="en">
<head>
    <title>Dices</title>
    <link rel="stylesheet" href="/css/Stylesheet.css">
    <script src="/js/GamblerScript.js"></script>
    <script src="/js/jquery-2.2.0.min.js"></script>
</head>
<body onload="Run();">
<div id="spinboxcontainer">
    <div class="spinbox">
        <span class="spinspan">Dices</span>
    </div>
<div id="container">
    <div id="spinner1" class="spinner">
        <div id="D1.1" class="one">1</div>
        <div id="D1.2" class="two">2</div>
        <div id="D1.3" class="three">3</div>
        <div id="D1.4" class="four">4</div>
        <div id="D1.5" class="five">5</div>
        <div id="D1.6" class="six">6</div>
    </div>
</div>
<div id=container2>
    <div id="spinner2" class="spinner">
        <div id="D2.1" class="one">6</div>
        <div id="D2.2" class="two">5</div>
        <div id="D2.3" class="three">4</div>
        <div id="D2.4" class="four">3</div>
        <div id="D2.5" class="five">2</div>
        <div id="D2.6" class="six">1</div>
    </div>
</div>
</div>
</body>
</html>

function Run(){
    alert('Welcome');
var clickNumber = 1; 
document.getElementById('spinner1').addEventListener("click", function(){
        alert('Your click is number ' + clickNumber + '!');
        document.body.className -= ' WhiteBackground';
        clickNumber = clickNumber + 1;
});

document.getElementById('spinner2').addEventListener("click", function(){
        alert('Your click is number ' + clickNumber + '!');
        document.body.className += ' WhiteBackground';
        clickNumber = clickNumber + 1;
});
};

你搞砸了不同的方法。如果您使用 express,则无需 http.createServer 并使用 fs.readFile 手动读取您的静态文件。对于简单的静态服务器,只需像这样简化您的主文件

var express = require('express');
var app = express();
app.use(express.static(__dirname + '/public'));
app.listen(8080, function() {console.log('server listening on port 8080...')})

您遇到的错误是因为每当浏览器向服务器请求 jqueryGamblerScript 等脚本文件时,您的自定义 http 服务器会发回您的 index.html 文件,并且浏览器会尝试执行喜欢 javascript.

你有几处做错了。

在代码的下半部分,在传递给 fs.readFile() 的回调中,您创建了一个 Node 服务器来处理 all 请求。强调的词在这里很关键:您正在创建一个仅使用 Node 的内置功能的服务器,而在使用 Express 时不需要这样做;并且服务器处理所有请求,而不仅仅是我认为您想要的 index.html 文件的请求。因此,当对 CSS 和 JavaScript 的请求到来时,您将发送 index.html 作为响应。这样不行。

幸运的是,解决方案比原来的问题简单。只需这样做:

'use strict';

const path = require('path');
const express = require('express');
const app = express();

// This just lets you set an alternate port with an environment variable,
// if you want.
const PORT = process.env.PORT || 8080;

// Set your static folder before any request handlers.
app.use(express.static(path.resolve(__dirname, 'public')));

// Handles request to root only.
app.get('/', (req, res) => {

  // If you needed to modify the status code and content type, you would do so
  // using the Express API, like so. However, this isn't necessary here; Express
  // handles this automatically.
  res.status(200);
  res.type('text/html');

  // Use sendFile(absPath) rather than sendfile(path), which is deprecated.
  res.sendFile(path.resolve(__dirname, 'index.html'));
});

// Call the listen() method on your app rather than using Node's http module.
app.listen(PORT, (err) => {
  if (err) throw err;
  else console.log(`Listening on port ${PORT}`);
});