[英]referencing custom javascript file in node.js web app
我正在学习node.js,并从常见的聊天应用示例开始。 我一切正常,但我不想将所有的javascript内联到index.html文件中,而是将其放在它自己的名为app.js的文件中。 但是,执行此操作后,在文件上找不到404。 我正在尝试使用src路径,但是找不到它来找到文件。 在节点应用程序中引用自定义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 />");
});
});
我可能会挂断掌握节点的概念,但是我假设我不需要在实际的server.js本身中做任何事情,因为那是服务器端代码,并且我不应该在服务器端。 像通常使用标准Web应用程序一样添加自定义js文件似乎不是此处的正确方法。 我注意到,在我所见/阅读的几乎所有教程/文档中,它们都通过调用cdn url而不是将那些文件作为模块或包含在本地目录中来引用诸如jquery和bootstrap之类的库。 仅基于此和我继续遇到的404错误,我假设存在另一种方法来将外部js引用包括到Web应用程序中的本地文件中。
提琴手输出:
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服务器中建立静态资产,因此无法提供文件。
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
然后在您的公共目录中放置可以提供服务的静态资产(CSS,JS,HTML)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.