gpt4 book ai didi

javascript - 在 node.js 网络应用程序中引用自定义 javascript 文件

转载 作者:行者123 更新时间:2023-11-30 15:57:21 25 4
gpt4 key购买 nike

我正在学习 node.js 并从常见的聊天应用程序示例开始。我让一切正常工作,但我不想在 index.html 文件中内联所有 javascript,而是想将它放在它自己的名为 app.js 的文件中。但是,一旦执行此操作,我就会收到 404 not found on the file。我正在尝试使用 src 路径,但无法找到文件。当它是 Node 应用程序时,是否有引用自定义 js/css 文件的技巧?

Index.html

<div id="chat"></div>
<form id="send-message">
<input type="text" id="message" />
<input type="submit" />
</form>


<script src="https://code.jquery.com/jquery-3.0.0.min.js"></script>
<script src="/socket.io/socket.io.js"></script>
<script src="/app.js"></script>
<script>

</script>

server.js

var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
var path = require('path');
app.use(express.static(path.join(__dirname, 'app.js')));
server.listen(process.env.port || 3000);

app.get('/', function (req, res) {
res.sendFile(__dirname + '/index.html');
});

io.sockets.on('connection', function (socket) {

socket.on('send message', function (message) {
console.log(message);
io.sockets.emit('new message', message);
});
});

app.js

$(document).ready(function () {
var socket = io.connect();
var form = $('#send-message');
var message = $('#message');
var chat = $('#chat');

form.submit(function (e) {
e.preventDefault();
socket.emit('send message', message.val());
message.val('');
});

socket.on('new message', function (data) {
chat.append(data + "<br />");
});

});

我可能无法理解 Node 的概念,但我假设我不必在实际的 server.js 中做任何事情,因为那是服务器端代码,我不应该做任何 dom在服务器端进行操作。像通常使用标准 Web 应用程序一样添加自定义 js 文件似乎不是正确的方法。我注意到,在我看过/读过的几乎所有教程/文档中,它们都通过调用 cdn url 来引用 jquery 和 bootstrap 等库,而不是将这些文件作为模块或包含在本地目录中。基于此和我不断收到的 404 错误,我假设有一种不同的方法可以在 Web 应用程序中包含对本地文件的外部 js 引用。

F12 Developer Tools

File structure

fiddler 输出:

GET http://localhost:1337/app.js HTTP/1.1
Host: localhost:1337
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
Accept: */*
Referer: http://localhost:1337/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cookie: __utma=111872281.1352628776.1455330937.1455330937.1455330937.1; __utmz=111872281.1455330937.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)

最佳答案

您需要在 server.js 中使用 express.static()。您没有在 Express 服务器中建立静态 Assets ,因此您无法提供文件。

var express = require('express');
var app = express();
var path = require('path');
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);

server.listen(process.env.port || 3000);

// The below works but isn't a good practice because it's not scalable
app.use('/app.js', express.static(path.join(__dirname, '/app.js')));

// You should create a public directory in your project folder and
// place all your static files there and the below app.use() will
// serve all files and sub-directories contained within it.
//app.use('public', express.static(path.join(__dirname, 'public')));

app.get('/', function (req, res) {
res.sendFile(__dirname + '/index.html');
});

通常您不会像我在上面的代码片段中那样将文件设置为静态。您将建立一个静态目录,例如 public,然后在您的公共(public)目录中放置可以提供的静态 Assets (CSS、JS、HTML)。

关于javascript - 在 node.js 网络应用程序中引用自定义 javascript 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38297009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com