![](/img/trans.png)
[英]Node.js + Express + socket.io - socket.io not serving properly
[英]socket.io and node.js not working properly
我正在嘗試練習使用socket.io和node.js創建應用程序。 這是一個簡單的“登錄”應用程序,但似乎不起作用,每當我啟動該應用程序時,在chrome開發者控制台上都會彈出一個404 not found消息,並顯示以下地址: http:// localhost:3000 / socket .io /?EIO = 3&transport = polling&t = 1469215104245-2
在我的index.hjs文件中
<div class="input-group">
<span class="input-group-addon" id="basic-addon1"></span>
<input type="text" class="form-control username" placeholder="Username" aria-describedby="basic-addon1">
</div>
<div class="input-group">
<span class="input-group-addon" id="basic-addon1"></span>
<input type="text" class="form-control password" placeholder="Password" aria-describedby="basic-addon1">
</div>
<button type="button" class="btn btn-primary">Primary</button>
<h2></h2>
<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
<script type="text/javascript">
var socket = io();
$('.btn-primary').click(function(){
var data = {username: $('.username').val(), password: $('.password').val()};
socket.emit('log-in',data);
socket.on('log-in success', function(){
$('h2').append('success')
});
socket.on('log-in fail', function(){
$('h2').append('fail')
});
});
</script>
在我的節點js服務器上(那里有更多代碼,但這些是相關的位):
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/userDB');
var userSchema = mongoose.Schema({
name: String,
password: String
});
var User = mongoose.model('User', userSchema);
io.on('log-in',function(data){
User.findOne({ 'username': data.username, 'password': data.password}, function (err, person) {
if (err) {io.emit('log-in fail')
return handleError(err)};
if (!person) io.emit('log-in success');
})
});
每當我嘗試以預制用戶身份登錄時,都不會得到任何回復。 任何幫助將非常感激。
您不會使用io.on()
聽服務器上給定連接的消息。 相反,您可以在偵聽給定套接字連接的地方執行此操作,然后將事件處理程序添加到該特定套接字,並且當您想發送回該套接字時,還可以使用該socket
對象將其發送回去。 這使您可以發送回剛向您發送消息的套接字:
io.on('connection', function (socket) {
socket.on('log-in', function (data) {
User.findOne({'username': data.username, 'password': data.password}, function (err, person) {
if (err) {
socket.emit('log-in fail')
return handleError(err)
};
if (!person) socket.emit('log-in success');
})
});
});
但是,您可能還想知道,有一個用於socket.io連接身份驗證的框架,它使它成為接受連接的內置部分。 如果願意,您可以這樣做,但是可能會遇到一些您沒有想到的問題。
PS:這種邏輯對我來說有點瑕疵。 如果在數據庫中找到該人,則不會在套接字上發出任何響應。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.