[英]How can I send information from NodeJS server to client side?
例如,我想向客戶端發出信號,通過POST方法以HTML格式發送的用戶名已存在於我的數據庫中。
我知道如何使用body-parser恢復POST數據,我知道如何在MySQL數據庫中查找它。
我知道我可以使用Ajax直接在表單上編寫錯誤消息。 我的NodeJS服務器需要發送什么以及它如何發送這些信息?
我搜索了大量的教程,我剛剛找到了他們發送新HTML頁面的解決方案。 我想保持我的網頁相同,並使用appendChild()等函數發布錯誤消息。
有幾種方法你可以從服務器端發送數據,所以NodeJS,到客戶端 - 我假設在你的情況下將是一些JavaScript文件,如main.js
處理DOM模擬。
因此,您可以發送數據的第一種方式是通過像Handlebars這樣的模板引擎 。 有一個易於使用的快遞模塊,你可以到這里: hbs 。
現在快速總結一下這樣的引擎是如何工作的,我們基本上就像你在教程中看到的那樣發送一個HTML文件, 然而 ,像Handlebars這樣的模板引擎允許我們動態地發送帶有該文件的實際數據,所以我們要做的是呈現一個特定的Handlebars 模板 (核心只是HTML),並將JavaScript對象傳遞給render調用,該調用將包含要傳遞到該文件的所有數據,然后在.hbs
文件中訪問它。
所以在服務器端,我們會寫這樣的東西,假設我們有一個名為home.hbs
的文件,並設置Handlebars作為模板引擎:
router.get('/home', function(req,res) {
var dataToSendObj = {'title': 'Your Website Title', 'message': 'Hello'};
res.render('home',dataToSendObj);
});
並在home.hbs
訪問如下:
<html>
<header>
{{title}}
</header>
<body>
message from server: {{message}}
</body>
</html>
現在,這種方法的問題在於,如果您想動態更新頁面上的數據, 而不必重新加載頁面,那么使用模板引擎並不理想。 相反,就像你說的那樣,你會使用AJAX。
所以,你可以從你的服務器的NodeJS到您的網站的前端發送數據的第2個方法,是使用異步AJAX調用。
首先,添加一個路由到您用於AJAX進行調用的任何路由處理程序。 這有一些邏輯可能訪問數據庫,進行一些檢查並將一些有用的信息返回給客戶端。
router.get('/path/for/ajax/call', function(req,res) {
// make some calls to database, fetch some data, information, check state, etc...
var dataToSendToClient = {'message': 'error message from server'};
// convert whatever we want to send (preferably should be an object) to JSON
var JSONdata = JSON.stringify(dataToSendToClient);
res.send(JSONdata);
});
假設您有一些文件,例如main.js
,請使用回調創建一個AJAX請求來偵聽某些事件響應,如下所示:
var req = new XMLHttpRequest();
var url = '/path/for/ajax/call';
req.open('GET',url,true); // set this to POST if you would like
req.addEventListener('load',onLoad);
req.addEventListener('error',onError);
req.send();
function onLoad() {
var response = this.responseText;
var parsedResponse = JSON.parse(response);
// access your data newly received data here and update your DOM with appendChild(), findElementById(), etc...
var messageToDisplay = parsedResponse['message'];
// append child (with text value of messageToDisplay for instance) here or do some more stuff
}
function onError() {
// handle error here, print message perhaps
console.log('error receiving async AJAX call');
}
總結一下使用AJAX的上述方法,這將是交互的流程:
希望這有用!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.