我应该在node.js上使用HTTP还是xmlhttprequest?当?

时间:2016-05-27 18:58:57

标签: ajax node.js xmlhttprequest

我仍在探索REST,node.js和一般的Web开发。我发现在使用AJAX时,xmlhttprequest主要(如果不是总是)使用。据我所知,AJAX用于异步Javascript和XML。所以我的问题是我应该在我的node.js项目中使用xmlhttprequest,就在我想在我的网页上做异步部分的时候?或者node.js HTTP也有机会异步javascript?如何平衡HTTP和xmlhttprequest(或AJAX)的使用,以便我在所有REST API中都不会太乱?

P.S。因为XML,我有点不想使用AJAX。我听说XML的数据比JSON重得多,不值得再使用了。这是真的吗?你建议我做什么?

1 个答案:

答案 0 :(得分:1)

节点上的非异步?

MRW reading node.js non async

您正在尝试构建端点api,因此所有其他不使用异步的情况都应该抛出窗口。只要在node.js项目中有一个非异步代码,它就会冻结整个过程,直到完成为止。记住Node.js运行一个Thread(理论上),这意味着所有其他并发用户都会被冻结......这是让人们真的很难过的一种方式。

例如,你需要从客户端的get请求中读取一个来自Node.js服务器的文件(比如一个浏览器),你想让它成为一个回调/承诺永远不要与API服务器进行非异步没有理由不(在你的情况下)。

以下示例

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});
});

完全相同的想法适用于您的网络浏览器..如果您不打算在浏览器中执行异步操作javascript整个Web应用程序将无响应,因为它也以相同的方式运行,它有一个主循环,除非他们在回调/承诺/可观察的网站将冻结。 Ajax是一种更简洁/更好的方式,可以从服务器实现post / get / put / delete / get:id,然后是XMLHttpRequest。现在,这两种方法都可以选择发送和接收JSON,而不仅仅是XML。由于支持不同的浏览器兼容性规范,Ajax更安全,因为XMLHttpRequest在IE和Safari中有一些限制,我相信。

注意:如果您没有使用带有node.js的框架,那么它有助于保持您的端点整洁和可测试,并且能够将项目传递给其他人,而无需他们了解您实现您的请求的方式,res结构

节点的一些框架

  1. Express 4(我的偏好,api doc真的非常好,很强 社区)
  2. Restify(由Netflix使用 - 真的很轻)
  3. Hapi(从未使用但听说过)
  4. 您可能喜欢的某些Web浏览器框架

    1. angular 2(我的偏好,因为我来自MEAN堆栈)

    2. reactJS(由大蓝Facebook创建)

    3. knockoutJS(简单易行)

    4. 所有浏览器框架都有自己的RESTful api实现,但更多的是倾向于Observable对象。