使用Node.js、Socket.IO和Express提供静态javascript文件

使用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

我有一个简单的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) {
    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();