2017-01-13 16 views
0

我一直在尋找兩天,現在正在尋找可能適用於我的解決方案。可悲的是,我只看過如何設置websocket服務器(向客戶端發送消息)和websocket客戶端(駐留在瀏覽器中)的示例和指南。這些都沒有爲我工作,我不知道如何實現我想在這裏。NodeJS Websocket在HTML中使用變量(使用快速?)

基本上我有以下的WebSocket:

require('dotenv').config() 

const WebSocket = require('ws'); 

var connection = new WebSocket('ws://XXX'); 

connection.onopen = function() { 
    connection.send(JSON.stringify({"authenticate":process.env.API})); 
    connection.send(JSON.stringify({"XXX":"YYY"})); 
    connection.send(JSON.stringify({ 
    "db" : "unique_id", 
    "query" : { 
     "table" : "users" 
    } 
})); 
}; 
connection.onerror = function (error) { 
    console.log('WebSocket Error ' + error); 
}; 

connection.onmessage = function (e) { 
    console.log('Server: ' + e.data); 
    var myResponse = JSON.parse(e.data); 
    var qList = myResponse.results; 
}; 

我想要做的是有我的NodeJS腳本運行,例如與HTML頁,還包括從的onMessage響應明示腳本。爲什麼我把這個複雜化,而不是僅僅使用websocket客戶端,我不能公開發送我的授權碼。

希望我已經清楚,讓我知道如果你不確定我的問題!

PS。如果你認爲我會更好地使用另一個像Socket.io這樣的websocket腳本 - 我一直在看着它們,並沒有得到更明智的看法。

+0

我已經做了很多與WS服務器的客戶端執行工作(由自動競價程序),但我不知道你的程序失敗。你做了什麼錯? –

+0

您的數據庫服務器只通過websockets進行通信是否有原因? – gregnr

+0

@gregnr他將他的服務器用作客戶端,通過網絡套接字連接到第三方。 –

回答

0

您有很多選擇。可能最簡單的是導出連接。在文件的底部,例如module.exports = connection

然後在快速應用程序中,導入連接,例如, const connection = require('./path/connection');

然後創建一個函數,以給定的時間間隔調用自身併發送相應的消息。然後在Express應用程序中,你可以使用類似connection.on('message',(data,flags)=> // do stuff)的東西;

您的其他選項是創建一個存儲對象。例如。

// ./store.js 

class store { 
    constructor() { 
    this.wsMaterial = {}; 
    } 

add(wsInfo) { 
    this.wsMaterial[key] = wsInfo 

} 

get store() { 
    return this.wsMaterial 
} 
} 

module.exports = new store() 

然後導入商店並更新它,

// ./websocket file 

const store = require('./store'); 

... 

connection.onmessage = function (e) { 
    console.log('Server: ' + e.data); 
    var myResponse = JSON.parse(e.data); 
    var qList = myResponse.results; 
    store.add(qList) 
}; 
從快遞

則...

// ./express.js 

const store = require('./store'); 

store.get // all of your stuff; 
+0

@ d-walsh, 非常感謝您的詳細幫助!我想我現在已經快到了,我似乎很難理解的唯一事情是如何在我的Express腳本中使用'store.get'。我知道如何在渲染中將其他變量傳遞給我的.ejs文件,但store.get var是空的。 這是我在哪裏現在: 'app.get( 「/」 功能(REQ,RES){ \t常量店=需要( './店'); \t VAR列表= store.get; \t VAR測試= 「測試」; \t \t res.render( '索引', \t {列表:列表中, \t測試:測試 \t}); });' – Erik

+0

廢話我'對不起。我走出門去,太快了。在我的示例中,您希望store.store不是store.get。 (顯然你可能想重命名該方法。Store.store有點奇怪:)) –

+0

完全沒問題!可悲的是我自己並沒有發現這個錯誤...... 我想我現在已經做完了,至少我正在顯示[object Object],但我認爲存儲文件存在錯誤。當我嘗試運行websocket-js時,它說''key'沒有在store.js文件中定義:'this.wsMaterial [key] = wsInfo ^ ^ ReferenceError:key is not defined' 對不起,對所有問題,但放棄在終點線上的遺憾! – Erik