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

Javascript 使用nodejs和express读取css/js文件,javascript,html,node.js,Javascript,Html,Node.js,说到nodejs,我真是个笨蛋,jsut几天前就开始了。我不明白为什么我的js和css文件没有被应用。没有404错误,所以看起来不是这样。我正在尝试使用express读取文件。我在开发工具中遇到以下控制台错误: GamblerScript.js:1未捕获的语法错误:意外标记您弄乱了不同的方法。如果使用express,则无需http.createServer并使用fs.readFile手动读取静态文件。对于简单的静态服务器,只需像这样简化主文件 var express = require('exp

说到nodejs,我真是个笨蛋,jsut几天前就开始了。我不明白为什么我的js和css文件没有被应用。没有404错误,所以看起来不是这样。我正在尝试使用express读取文件。我在开发工具中遇到以下控制台错误:


GamblerScript.js: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...')})

您所遇到的错误是,每当浏览器向服务器请求脚本文件(如
jquery
GamblerScript
)时,您的自定义http服务器会将index.html文件发回,浏览器会像javascript一样执行它。

您弄乱了不同的方法。如果使用
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...')})

您遇到的错误是,每当浏览器向服务器请求脚本文件时,如
jquery
GamblerScript
,您的自定义http服务器都会将index.html文件发送回,浏览器会像javascript一样执行它。

有几件事情您做得不对

在代码的下半部分,在传递给
fs.readFile()
的回调中,创建一个节点服务器来处理所有请求。这里强调的词很关键:您创建的服务器只使用节点的内置功能,使用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}`);
});

有几件事你做错了

在代码的下半部分,在传递给
fs.readFile()
的回调中,创建一个节点服务器来处理所有请求。这里强调的词很关键:您创建的服务器只使用节点的内置功能,使用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}`);
});

我们看不到任何
Run()
方法。尝试发布
GamblerScript.js
。确实添加了它。我认为这与问题无关,所以我一开始没有发布。我们看不到任何
Run()
方法。尝试发布
GamblerScript.js
。确实添加了它。我不认为这与问题有关,所以我一开始没有发布。