我会通过Node
,Express
,和Socket.io
聊天教程。我决定用来Redis
存储聊天记录,并成功设置了聊天记录,以便我的信息正确发布到数据库中。我现在正在尝试访问要在客户端使用的信息(在这种情况下,我正在尝试访问当前在聊天中的用户列表,以便可以将他们显示在聊天的一侧)。我$.getJSON
用来提出GET
要求。现在,我已经对其进行了设置,以便它尝试访问的文件仅具有该JSON
对象:{"dog" : "2","cat":"3"}
只是为了对其进行测试,并且可以正常工作,但是我不确定从那里去哪里,因为我每次尝试向该文件中添加函数时,即使我指定返回JSON对象并调用该函数,该请求也会停止返回正确的信息。
例如我试过:
var data = function(){
return {"dog" : "2","cat":"3"}
}
data();
并且不返回任何内容(我了解,当我发出GET
请求时,该函数未运行,但它甚至不返回该文本,如果它不运行函数,那么我不确定如何可以从该文件访问redis)
这就是我的想法:
var redis = require('redis')
//figure out how to access the redis client that I have at localhost:6379, something like var db = redis.X
//and then call (for example) db.smembers('onlineUsers') and be returned the object which I can iterate through
这是我的相关代码:
server.js:
var jade = require('jade');
var PORT = 8080;
var redis = require('redis');
var db = redis.createClient();
var pub = redis.createClient();
var sub = redis.createClient();
var http = require('http');
var express = require('express');
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(PORT, function(){
console.log("Now connected on localhost:" + PORT)
});
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.set("view options", {layout: false});
app.use(express.static(__dirname + '/public'));
app.get('/', function(req, res){
res.render('home');
});
io.sockets.on('connection', function(client){
sub.subscribe("chatting");
sub.on("message", function (channel, message) {
console.log("message received on server from publish");
client.send(message);
});
client.on("sendMessage", function(msg) {
pub.publish("chatting",msg);
});
client.on("setUsername", function(user){
pub.publish("chatting","A new user in connected:" + user);
db.sadd("onlineUsers",user);
}
);
client.on('disconnect', function () {
sub.quit();
pub.publish("chatting","User is disconnected :" + client.id);
});
});
script.js:
$(document).ready( function(){
$client = io.connect();
initialize();
});
var setUsername = function(){
var username = $("#usernameInput").val();
if (username)
{
var user = username;
$client.emit('setUsername', username);
$('#chatControls').show();
$('#usernameInput').hide();
$('#usernameSet').hide();
showCurrentUsers();
}
}
var showCurrentUsers = function(){
$('#list_of_users').empty();
$.getJSON('getusers.js', function(data){
for (var i = 0; i < data.length; i++){
$('list_of_users').append("<li>"+data[i]+"</li>")
}
})
}
var sendMessage = function(){
var msg = $('#messageInput').val();
var username = $("#usernameInput").val();
if (msg)
{
var data = {msg: msg, user: username}
$client.emit('message', data);
addMessage(data);
$('#messageInput').val('');
// populate(username,msg);
}
}
var addMessage = function(data) {
$("#chatEntries").append('<div class="message"><p>' + data.user + ' : ' + data.msg + '</p></div>');
}
// var populate = function(username,msg) {
// var data ;
// }
var initialize = function(){
$("#chatControls").hide();
$("#usernameSet").on('click', setUsername);
$("#submit").on('click',sendMessage);
showCurrentUsers();
}
现在,getusers.js
文件包含的所有内容是:
{"dog" : "2","cat":"3"}
您似乎希望对$ .getJSON的调用能够加载并执行它加载的JavaScript。这样行不通。您需要制作一个节点端点(通过路由)以呈现JSON。然后,节点端点将进行数据操作/查询redis:
节点:
在routes.js中:
app.get('/chatdata', ChatController.getChatData);
在ChatController.js中(按需在此处创建数据)
exports.getChatData = function (req, res) {
var data = function(){
return {"dog" : "2","cat":"3"}
};
res.JSON(data);
};
前端
$.getJSON('getChatData', function(data){
//...
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句