好,第一次将文件结构:
app
|___app.js
|___models/
|_user.js
|___routes/
|___admin.js
|___public/
|___js/
|___script.js
app.js:
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
http.listen(3000, function (err){
if (err) throw err;
console.log("Server is running");
});
script.js:
var socket = io();
//Next, this tells the browser that is has connected to the socket.io server
socket.on('connect', function() {
console.log('Connected to socket.io server!');
});
socket.on('message', function(message){
console.log('New message: ');
console.log(message.text);
});
var $newUsername = $('#Username');
$newUsername.on('blur', function(event){
socket.emit('message', {
text: $newUsername.val()
});
});
因此,在注册页面上,如果用户在数据库中已经输入了'用户名',它将console.log'该用户已经存在'。至少,这是主意。
我还需要在服务器端添加sockets.io代码。我试图把它放在这儿:
admin.js:
var router = require('express').Router();
var User = require('../models/user');
io.on('connection', function(socket) {
console.log('User connected via socket.io!');
socket.on('message', function(message) {
Username.findOne({username: message.text}, function (err, existingUsername) {
if (existingUsername) {
console.log('This user already exists: ' + message.text);
}
});
});
});
所以,这表示,在admin.js的sockets.io代码将无法工作,因为它无法访问io功能。我想知道我该如何解决这个问题。
为了增加这样的:sockets.io代码我在admin.js文件将正常工作,如果我把它放在我的app.js文件。
+1
为什么它不能在你的其他文件中工作? socket.io并不关心页面是什么路线。如果您希望在您的所有文件中都有可用的用户名,请将其设置为可在客户端页面或服务器上随时获取的cookie。 –
+0
当你说路线文件。路由文件/主页或注册表单页面。 ? –
+0
你是否担心你不想在这个端口上永久监听只用于名称验证?所以你想踢开始听路由文件,该路由文件呈现注册页面? –