快速js聊天应用程序:socket.io.js文件出现404错误
Express js chat application:404 error on socket.io.js file
我正在尝试使用Express js(翡翠模板)和socket.io
开发聊天应用程序。这里是我的app.js
var express = require('express');
var path = require('path');
var http = require('http');
var io = require('socket.io')(http);
var app = express();
//start chat with socket io
io.sockets.on('connection',function(socket){
console.log("connection");
socket.on('send message',function(data,callback){
var msg=data.trim();
if(msg==null){
callback("enter a messsage");
}else{
console.log("chat message"+msg);
io.sockets.emit('new message',{msg:msg});
}
});
});
//end socket
这是我的chat.js
文件在客户端
$(document).ready(function(){
var socket=io.connect('http://localhost:3000');
var $message=$('#message');
var $messageForm=$('#send-message');
//opens a connection and send to sever
$messageForm.submit(function(e){
e.preventDefault();
socket.emit('send message',$message.val(),function(data){
console.log("data"+data);
});
$message.val('');
});
//read the chat messages from users
socket.on('new message',function(data){
console.log('data.msg');
});
});
chat.jade
file
<form id="send-message">
<input type="text" id="message">
<input type="submit" value="submit"/>
</form>
<script src="http://localhost/api/jquery.min.js"></script>
<script src="http://localhost:3000/socket.io/socket.io.js"></script>
我将得到404错误在这个文件http://localhost:3000/socket.io/socket.io.js
。还可以在chat.js脚本中获得Uncaught ReferenceError: io is not defined
。我想这是因为缺少socket.io.js
文件。
你有几个问题。
在jade模板中提供静态文件,您应该使用如下内容:
link(rel='text/javascript', href='/js/socket.io.js')
这些文件通常包含在express应用程序的public
目录中。然后在你的app.js
中,你应该有这样的内容:
app.use(express.static('public'));
在express网站上有解释- http://expressjs.com/starter/static-files.html
其他地方的Uncaught ReferenceError: io is not defined
$(document).ready(function(){
var socket=io.connect('http://localhost:3000');
这是因为您没有在客户端上定义io
。在io
上调用connect
,但没有在任何地方声明/定义io
。
您还没有在应用端创建套接字服务器。你应该这样做:
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 3000;
server.listen(port, function () {
console.log('Server listening at port %d', port);
});
io.on('connection', function (socket) {
// when the client emits 'new message', this listens and executes
socket.on('new message', function (data) {
// we tell the client to execute 'new message'
socket.broadcast.emit('new message', {
});
});
套接字。我在github上有一个聊天应用的例子,你可以作为参考。你的chat.js
将相当于他们的公共/main.js
你的chat.jade
相当于他们的公共/index.html
你的app.js
匹配他们的index.js
相关文章:
- Node.js错误“;ReferenceError:全局未定义“;在从0.10.2更新到0.12.2之后
- 最短路径算法js错误
- Modx数据包管理器ext-all.js错误
- Dropzone引导JS错误
- JS错误导致WordPress插件无法工作
- Date.js错误地分析了ISO 8601 UTC日期
- Ember.js错误“;无法读取属性'容器'未定义的“;使用液体火时
- React.js错误;相邻的JSX元素必须被封装在一个封闭标记“中;
- 获取意外的令牌ILLEGAL JS错误
- 使用动画时出现反应JS错误
- IE8 中未知的 JS 错误
- Angular JS错误:仅在IE 10和IE 11中出现[$rootScope:infdig]
- Meteor JS错误”;ReferenceError:X未定义”;
- Node.js错误:参数太多上传批量数据时出错
- CKEditor选项startupMode导致js错误
- 在出现JS错误的页面上运行外部Javascript
- angular js:错误:$没有在http文章中定义
- 使用JS检测所有JS错误
- Firebug不再显示JS错误
- require.js错误(topojson未加载)