在express中显示html文件失败,关于javascript:NodeJS + Express提供的HTML文件未加载js文件?...
我正在运行NodeJS服务器,该服务器使用综合路由来提供文件'index.html'。 在该文件中,我链接到同一目录中的javascript文件。 该javascript文件未正确加载。 我的控制台中的错误为"未捕获的SyntaxError:意外的令牌这是我的代码server.jsvar express = require('express');var app = express();var co
我正在运行NodeJS服务器,该服务器使用综合路由来提供文件'index.html'。 在该文件中,我链接到同一目录中的javascript文件。 该javascript文件未正确加载。 我的控制台中的错误为"未捕获的SyntaxError:意外的令牌
这是我的代码
server.js
var express = require('express');
var app = express();
var config = require('./config');
var apiRouter = express.Router();
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var User = require('./app/models/User');
var jwt = require('jsonwebtoken');
var path = require('path');
//Set the public folder
app.use(express.static('/public'));
//Allows us to parse POST data.
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
mongoose.connect(config.db);
var apiRouter = require('./app/routes/api')(app, express);
app.use('/api', apiRouter);
//MEAN apps use a catchall after any routes created by Node.
app.get('*', function(req, res) {
res.sendFile(path.join(__dirname, 'public/app/views/index.html'));
});
app.listen(1337);
console.log('Server started at ' + Date());
public / app / views / index.html
Served by node + express.
公共/应用程序/视图/ test.js
console.log('test.js loaded');
不应该是app.use(express.static(__dirname + public));吗?
这是问题,谢谢! 只是缺少的__dirname。 显然,我是express的菜鸟:(一周前才开始学习它。
您应该像这样设置静态文件夹
app.use(express.static(__dirname + '/public'));
另外,您的html文件将在/ public文件夹中查找脚本文件。您需要为index.html文件提供脚本文件的正确路径。
是的,谢谢,这就是问题所在
别客气!
这是正在发生的事情:
浏览器请求/,它由您的总体路由响应,因此返回index.html。
然后,浏览器在html的./test.js处看到一个脚本,因此浏览器随后将其解释为/test.js并发出请求。 express.static中间件查找不存在的public/test.js,因此它将执行传递到与请求匹配的下一个定义的路由,这就是您的全部路由。这意味着为javascript文件发送了html,因此出现了错误。
因此,要解决此问题,无论当前路径是什么,都需要将./test.js更改为实际的相对路径(./app/views/test.js)或使用绝对路径(/app/views/test.js)以确保始终使用正确的路径。
此外,您将需要更改以下内容:
app.use(express.static('/public'));
像这样:
app.use(express.static(__dirname + '/public'));
否则,express.static中间件将在文件系统的根目录下查找名为public的目录,并且在为您的javascript文件请求提供html的catchall路由上也会遇到相同的问题。
嗨,我只是尝试过,但没有成功。 我也尝试过" ./app/views/test.js",只是因为。 也没有工作。
问题是缺少__dirname变量,谢谢。 我还应该在express.static中使用path.join吗?
您可以根据需要。
实际上,我也应该将其标记为答案,因为将路径更改为您所说的内容,并在__dirname变量中添加了express.static两者,两者都可以解决问题。 :)非常感谢您抽出宝贵的时间来答复和帮助。
这个答案比其他答案对我有更多帮助,因为仅更改app.use无效,并且还说明了正在进行的操作以及为什么我们需要进行这些更改
更多推荐

所有评论(0)