使用Node.js、Socket.IO和Express提供静态javascript文件
我有一个简单的node.js应用程序,它使用socket.io和express。目前所有的javascript都在HTML文件中,但我想尝试将其分离成一个.js文件 在我的主节点应用程序中,我有:使用Node.js、Socket.IO和Express提供静态javascript文件,javascript,node.js,express,socket.io,Javascript,Node.js,Express,Socket.io,我有一个简单的node.js应用程序,它使用socket.io和express。目前所有的javascript都在HTML文件中,但我想尝试将其分离成一个.js文件 在我的主节点应用程序中,我有: var app = require('express')(); var http = require('http').Server(app); var io = require('socket.io')(http); app.get('/', function (req, res) { re
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function (req, res) {
res.sendFile(__dirname + '/index.html');
});
在我将javascript从index.html移到.js文件之前,这一切都很正常,然后尝试从html文件中引用它,如下所示:
<script src="functions.js"></script>
app.use(express.static("/js", path.join(__dirname, "public")));
有人能告诉我我做错了什么吗?解决方案非常简单:使用express中的
express.static
内置中间件功能
例如,您可以将其添加到主节点应用程序中:
app.use(“/js”,static(uu dirname+'/js')代码>
有关详细信息,请阅读以下内容:默认情况下,nodejs和express不提供任何文件。因此,当您创建第一条路线时:
app.get('/', function (req, res) {
res.sendFile(__dirname + '/index.html');
});
这成功地允许浏览器请求/
查看您的index.html文件。浏览器随后将接收该HTML文件并对其进行解析。如果它在该文件中找到
标记,它将向您的服务器发出新的web请求。因此,如果该文件中包含以下内容:
<script src="functions.js"></script>
这行中间件告诉express,如果有任何以/js
开头的请求传入,请在\uuu dirname+“/public”
目录中查找匹配的文件。因此,如果请求是针对/js/functions.js
,那么请查找名为\uu dirname+“/public/functions.js”
的文件。如果找到该文件,则自动提供该文件。要使其在index.html文件中正常工作,请将
标记设置为:
<script src="/js/functions.js"></script>
为此:
var express = require('express');
var app = express();
或者,在nodejs的任何最新版本中,我更喜欢对不应重新分配的变量使用const
:
const express = require('express');
const app = express();
看文件怎么样?为什么对这个答案投反对票?这个答案怎么了?谢谢,这是一个很大的帮助,但我收到了这样一条消息:“ReferenceError:express未定义”@Tim-看看我在答案末尾添加了什么。@jfiend00-谢谢,明白了!感谢您的帮助。这对我不起作用,它应该以app.use(“/js”,express.static(path.join(u dirname,“public”))的形式出现代码>
var express = require('express');
var app = express();
const express = require('express');
const app = express();