Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js要连接的服务器和客户端sideo代码_Javascript_Postgresql_Node.js - Fatal编程技术网

Javascript node.js要连接的服务器和客户端sideo代码

Javascript node.js要连接的服务器和客户端sideo代码,javascript,postgresql,node.js,Javascript,Postgresql,Node.js,我正在尝试设置一个node.js服务器向客户端发送消息,然后客户端将使用jquery通知库显示消息,如果有人感兴趣,我将使用此通知库: 目前,我有一个postgres数据库,其中有一个表,该表上有一个触发器,可以写入侦听器 触发条件如下: CREATE OR REPLACE FUNCTION new_noti() RETURNS trigger AS $$ DECLARE BEGIN PERFORM pg_notify('watchers', TG_TABLE_NAME || ',msg

我正在尝试设置一个node.js服务器向客户端发送消息,然后客户端将使用jquery通知库显示消息,如果有人感兴趣,我将使用此通知库:

目前,我有一个postgres数据库,其中有一个表,该表上有一个触发器,可以写入侦听器

触发条件如下:

CREATE OR REPLACE FUNCTION new_noti() RETURNS trigger AS $$
DECLARE
BEGIN
    PERFORM pg_notify('watchers', TG_TABLE_NAME || ',msg,' || NEW.msg );
    RETURN new;
END; 
$$ LANGUAGE plpgsql;
var pg = require ('pg');

var pgConString = "pg://aydin:password@localhost/test"

var app = require('http').createServer(handler)
    , io = require('socket.io').listen(app)
    , url = require('url')

app.listen(8080);

function handler (request, respsonse) {
    var client = new pg.Client(pgConString);
    client.connect();
    client.query('LISTEN "watchers"');
    client.on('notification', function(msg) {
        console.log(msg.payload);
        sendMessage(msg.payload);
    });
}

function sendMessage(message) {
    io.sockets.emit('notification', {'message': message});
}
<script type="text/javascript">
    var socket = io.connect('http://localhost:8080');
    socket.on('notification', function (data) {
        console.log(data.message);
        newNoty(data);
    });

    function newNoty(data) {
        noty({
            "text":data.message,
            buttons: [{
                type: 'button green',
                text: 'Go to' 
            }],
            "theme":"noty_theme_twitter",
            "layout":"bottomRight",
            "type":"information",
            "animateOpen":{
                "height":"toggle"
            },
            "animateClose":{
                "height":"toggle"
            },
            "speed":500,
            "timeout":7500,
            "closeButton":true,
            "closeOnSelfClick":true,
            "closeOnSelfOver":false,
            "modal":false,
        });
    }
</script>
然后我有一个node.js服务器,如下所示:

CREATE OR REPLACE FUNCTION new_noti() RETURNS trigger AS $$
DECLARE
BEGIN
    PERFORM pg_notify('watchers', TG_TABLE_NAME || ',msg,' || NEW.msg );
    RETURN new;
END; 
$$ LANGUAGE plpgsql;
var pg = require ('pg');

var pgConString = "pg://aydin:password@localhost/test"

var app = require('http').createServer(handler)
    , io = require('socket.io').listen(app)
    , url = require('url')

app.listen(8080);

function handler (request, respsonse) {
    var client = new pg.Client(pgConString);
    client.connect();
    client.query('LISTEN "watchers"');
    client.on('notification', function(msg) {
        console.log(msg.payload);
        sendMessage(msg.payload);
    });
}

function sendMessage(message) {
    io.sockets.emit('notification', {'message': message});
}
<script type="text/javascript">
    var socket = io.connect('http://localhost:8080');
    socket.on('notification', function (data) {
        console.log(data.message);
        newNoty(data);
    });

    function newNoty(data) {
        noty({
            "text":data.message,
            buttons: [{
                type: 'button green',
                text: 'Go to' 
            }],
            "theme":"noty_theme_twitter",
            "layout":"bottomRight",
            "type":"information",
            "animateOpen":{
                "height":"toggle"
            },
            "animateClose":{
                "height":"toggle"
            },
            "speed":500,
            "timeout":7500,
            "closeButton":true,
            "closeOnSelfClick":true,
            "closeOnSelfOver":false,
            "modal":false,
        });
    }
</script>
然后我有一些客户端代码,如下所示:

CREATE OR REPLACE FUNCTION new_noti() RETURNS trigger AS $$
DECLARE
BEGIN
    PERFORM pg_notify('watchers', TG_TABLE_NAME || ',msg,' || NEW.msg );
    RETURN new;
END; 
$$ LANGUAGE plpgsql;
var pg = require ('pg');

var pgConString = "pg://aydin:password@localhost/test"

var app = require('http').createServer(handler)
    , io = require('socket.io').listen(app)
    , url = require('url')

app.listen(8080);

function handler (request, respsonse) {
    var client = new pg.Client(pgConString);
    client.connect();
    client.query('LISTEN "watchers"');
    client.on('notification', function(msg) {
        console.log(msg.payload);
        sendMessage(msg.payload);
    });
}

function sendMessage(message) {
    io.sockets.emit('notification', {'message': message});
}
<script type="text/javascript">
    var socket = io.connect('http://localhost:8080');
    socket.on('notification', function (data) {
        console.log(data.message);
        newNoty(data);
    });

    function newNoty(data) {
        noty({
            "text":data.message,
            buttons: [{
                type: 'button green',
                text: 'Go to' 
            }],
            "theme":"noty_theme_twitter",
            "layout":"bottomRight",
            "type":"information",
            "animateOpen":{
                "height":"toggle"
            },
            "animateClose":{
                "height":"toggle"
            },
            "speed":500,
            "timeout":7500,
            "closeButton":true,
            "closeOnSelfClick":true,
            "closeOnSelfOver":false,
            "modal":false,
        });
    }
</script>

var socket=io.connect('http://localhost:8080');
socket.on('notification',函数(数据){
console.log(data.message);
纽诺蒂(数据);
});
函数newNoty(数据){
诺蒂({
“文本”:data.message,
按钮:[{
键入:“绿色按钮”,
文本:“转到”
}],
“主题”:“noty_theme_twitter”,
“布局”:“右下角”,
“类型”:“信息”,
“动画人”:{
“高度”:“切换”
},
“动画关闭”:{
“高度”:“切换”
},
“速度”:500,
“超时”:7500,
“closeButton”:正确,
“closeOnSelfClick”:true,
“closeOnSelfOver”:false,
“模态”:假,
});
}
这不起作用,node.js似乎从未收到postgres通知,我认为这是因为我使用的是函数处理程序,实际上我没有从客户端代码向它发出任何请求。我不知道怎么做,这是否是正确的方法? 是否有一个函数可以在连接时启动而不是在请求时启动


我做得对吗?客户端是否应该有一台node.js向其发送消息的服务器?它如何知道客户何时可用?如有任何帮助或指南,将不胜感激。谢谢。

在客户端发送HTTP请求之前,您不会真正设置数据库连接。由于同源问题(您的客户机代码似乎来自您所展示的服务器之外的其他地方),这种情况似乎永远不会发生


在任何情况下,您都可能希望设置连接以响应来自
io.sockets
“连接”
事件(即,将HTTP请求处理程序中当前的内容移动到那里)。这就是它“知道客户何时可用”的方式。或者你应该把它作为初始化的一部分。您的客户端代码看起来还可以,但它与上下文无关,因此很难判断它是否真的符合您的需要。

是的,客户端代码将在服务器的其他位置运行。我只想在触发器写入侦听器时能够将消息推送到用户。是否可以设置服务器客户端,然后node.js脚本在收到Postgres的消息时可以向客户端服务器发送消息?如果这有意义的话?如果您还没有这样做,请查看socket.io自述文件中的前几个示例。您似乎对客户端需要一个“服务器”的想法很感兴趣。你没有。io只是在客户端创建一个连接,当服务器向其发送消息时触发事件;客户端代码响应它们的方式与响应鼠标单击或按键的方式相同。