2016-05-27 13 views
0

Ich erforsche immer noch REST, node.js und allgemein Web-Entwicklung. Was ich herausgefunden habe ist, dass xmlhttprequest meistens (wenn nicht immer) verwendet wird, wenn AJAX verwendet wird. Wie ich gelernt habe, ist AJAX für asynchrones Javascript und XML. Also meine Frage ist, sollte ich xmlhttprequest in meinem Projekt node.js verwenden, gerade wenn ich asynchrone Teile auf meiner Webseite machen möchte? oder hat node.js HTTP auch Gelegenheit zu asynchronem Javascript? Wie kann ich die Verwendung von HTTP und xmlhttprequest (oder AJAX) gut ausbalancieren, damit ich nicht in all meinen REST-API-Sachen zu unordentlich werde?Sollte ich HTTP oder xmlhttprequest auf node.js verwenden? Wann?

P.S. Ich möchte irgendwie AJAX wegen XML nicht verwenden. Ich habe gehört, dass XML Daten viel schwerer als JSON und nicht mehr wert ist, zu verwenden. Ist es wahr? Was würdest du mir empfehlen?

Antwort

1

nicht asynchron auf Knoten?

MRW reading node.js non async

Sie versuchen, einen Endpunkt api, so dass alle anderen Fälle nicht mit Asynchron bauen sollte aus dem Fenster geworfen werden wird. Sobald Sie einen einzelnen nicht asynchronen Code in Ihrem node.js-Projekt haben, wird der gesamte Prozess eingefroren, bis er abgeschlossen ist. Denken Sie daran, dass Node.js (theoretisch) einen einzelnen Thread ausführt, was bedeutet, dass alle anderen gleichzeitigen Benutzer eingefroren werden. Das ist eine Möglichkeit, Leute wirklich verärgert zu machen.

sagen Sie zum Beispiel müssen Sie eine Datei von Ihrem Node.js Server auf eine Anfrage von einem Client lesen (sagen wir einen Browser) und Sie wollen es zu einem Callback/Versprechen nie nicht async mit einer API machen Server gibt es einfach keinen Grund, nicht (in Ihrem Fall).

Beispiel unter

import * as express from "express"; 
 
import * as fs from 'fs'; 
 

 
let app = express(); 
 

 
app.get('/getFileInfo', function(req, res) { 
 
    fs.readFile('filePath', 'UTF-8', function(err, data) { 
 
     if (err) { 
 
      console.log(err); 
 
      res.json({error: err}); 
 
     } else {   
 
     res.json({data: data}); 
 
     } 
 
    }) 
 
}); 
 

 
//users will freeze while the file is read until it is done reading 
 
app.get('/nonasync', function(req, res) { 
 
    let data = fs.readFileSync('path', 'utf-8'); 
 
    res.json({data:data}); 
 
});

genau die gleiche Idee gilt für Ihren Web-Browser .. wenn Sie nicht async in den Browsern etwas tun werden, JavaScript, um die gesamte Web-Anwendung reagiert nicht mehr sein wird, weil es auch auf die gleiche Weise läuft, hat es eine Hauptschleife und wenn sie nicht in Rückrufen/Versprechen/beobachtbar sind, wird die Webseite einfrieren. Ajax ist ein viel besserer Weg, um post/get/put/delete/get: id von einem Server als XMLHttpRequest zu implementieren. jetzt haben beide eine Option zum Senden und Empfangen von JSON nicht nur XML. Ajax ist sicherer, da es verschiedene Browserkompatibilitätsspezifikationen unterstützt, da XMLHttpRequest einige Einschränkungen in IE und Safari hat, glaube ich.

HINWEIS: Wenn Sie kein Framework mit Knoten verwenden.js Sie sollten, hilft es, Ihre Endpunkte zu halten ordentlich und prüfbar zusammen mit dem Projekt an andere weitergeben zu können, ohne dass sie die Art und Weise zu lernen, die Sie Ihre req implementiert, res Struktur

einige Gerüste für Knoten

  1. Express 4 (meine Präferenz ist api doc wirklich sehr gut und stark
    Gemeinschaft)
  2. Restify (verwendet von Netflix - wirklich Licht)
  3. Hapi (nie verwendet, aber davon gehört)

einige Frameworks für Web-Browser können Sie

  1. Winkel 2 (meine Präferenz, wie ich aus einem MEAN Stapel bin)

  2. reactJS wie

    (von großen blauen Facebook erstellt)
  3. knockoutJS (einfach und einfach)

Alle Browser-Frameworks haben ihre eigenen Implementierungen der RESTful Apis, aber mehr neigen sich zu beobachtbaren Objekten.

+0

Andrei danke für Ihre Antwort. Ich dachte, AJAX wäre dasselbe wie XMLHttpRequest. um korrekter zu sein, dachte ich, AJAX benutzte XMLHttpRequest, um asynchrone Sachen zu machen. Ich benutze Express und möchte auch eckig versuchen. Ich habe MEAN Stack nicht benutzt, möchte aber den ganzen Stack versuchen. Ihre Antwort war wirklich hilfreich, aber hat mich immer noch ein wenig verwirrt. Wie verwende ich AJAX ohne XmlHttpRequest? – Vato

+0

Ok Ich denke, ich habe es herausgefunden. Ich dachte, dass es nur eine AJAX-Bibliothek gab, die XmlHttpRequest war. Ich habe herausgefunden, dass es viele andere Bibliotheken gibt. Jetzt macht alles Sinn :) – Vato

+1

hier ist eine tolle SO-Erklärung, sorry für die Verwirrung! Was ich versuchte zu vermitteln, ist, dass die Bibliotheken die XML-Anfrage umhüllen und mehr Benutzerfreundlichkeit erlauben und mehr API zur Verfügung stellen, als die Basis-XMLHttpRequest, denke daran, XMLHttRequests zu erweitern -> besser beantwortet [hier] (http: // stackoverflow.com/questions/4657287/what-is-the-difference-between-xmlhttprequest-jquery-ajax-jquery-post-jquery), aber um Ihre Bedenken von xml vs json zu adressieren, müssen Sie nur in der Anfrage Sie angeben machen. Im Wesentlichen XMLHttpRequest ist die Browser-API, um das HTTP-Protokoll zu verwenden. – Andrei