2014-09-24 59 views
0

基本上,我的思維過程如下。節點js服務器:我想用HTML和JSON響應同一個瀏覽器請求,這可能嗎?

客戶端/瀏覽器請求html文件login.html。該文件包含一個帶有usernamepassword字段的表單。提交按鈕使用給定的用戶和密碼字段值向服務器發送POST請求。很簡單,到目前爲止。

服務器然後檢查命名約定username.jsonJSON文件的文件夾/users。例如,如果客戶端提交用戶名「John」,它會檢查文件John.json是否存在。如果確實如此,它會將POST請求中提交的密碼值與JSON文件的密碼值進行比較。如果匹配,則返回login-success html文件,否則將重定向回家。

這就是我的問題所在。如果成功了,我也不會'與'JSON文件相匹配的'迴應',但請求似乎只允許響應是一種內容類型,或者從一個文件中讀取。

所以,我只是不確定客戶端將如何根據給定的響應知道要讀取哪個JSON文件。我確信有一個簡單的解決方案,我是一個白癡,但任何幫助,將不勝感激。

在此先感謝!

+1

HTML和JSON只是文本,所以儘管可能,但並不一定有意義。 – 2014-09-24 20:50:52

+0

將JSON放入HTML響應的SCRIPT塊中。 – 2014-09-24 20:52:53

+0

@FelixKling是的,最終他們都可以歸結爲純文本對象,然後由瀏覽器解釋爲HTML ......我只是想知道是否有任何優雅的方式傳遞客戶端的json文件匹配在服務器上的同樣的要求。不過,我開始認爲沒有一個。 – 2014-09-24 21:02:13

回答

0

最後,我決定用Sockets.io模塊爲了傳遞客戶端我的json數據。 這使我能夠在服務器和客戶端之間的HTTP服務器背面打開TCP連接。當提交的密碼與json文件中的密碼相匹配時,服務器會向該客戶端發出一個"login-success"事件,並且該事件將傳遞服務器中使用的json文件。客戶端腳本接受該響應並分析該數據以供使用。這裏有一個例子:

server.js - 服務器端腳本

if (password == json.password) { 
    io.on("connection", function(socket){ 
     socket.emit("login-success", json); 
    } 
} 

app.js - 客戶端腳本

var socket = io("http://localhost:8888"); 
var username; 
socket.on("login-success", function(json){ 
    username = JSON.parse(json).username; 
} 

這也意味着數據只需被讀取在一次,它分配的對象只是通過在它和服務器之間建立的TCP流傳遞給客戶端。 Hoorah!

非常感謝大家的回覆。

1

您可以迴應一個HTML文件,當文件加載,如果你使用jQuery的爲您的客戶端框架響應JSON文件,
例如:

$(document).ready(function(){ 
    $.get(URL_To_JsonFile,Params,function(data){ 
     //do somthing with json file 
    }) 
}) 
+0

感謝您的迴應!基本上,我的問題是客戶端不知道*哪個* json文件要讀入。我的主要查詢是服務器關於讓客戶端知道要讀入哪個json文件的方式,基於匹配的值在POST請求中提交的用戶名(如果這有意義?)。 – 2014-09-24 21:05:58

+0

我認爲如果POST響應(不管是HTML還是JS)不以某種方式包含某種用戶令牌,您可能會以各種其他方式遇到該問題 - 您共享的一些加密字符串,用於指定此客戶端已成功記錄通常它是一個cookie。 – Katana314 2014-09-24 21:39:49

+0

@ Katana314餅乾是我從來沒有看過的東西,也不知道它們是如何工作的或者它們服務的目的(在這種情況下)。所以你說服務器應該在成功登錄後創建一個cookie,然後將其保存到客戶機器上?我會如何去做這件事?乾杯! – 2014-09-25 16:06:57

相關問題