【问题标题】:Should I use HTTP or xmlhttprequest on node.js? When?我应该在 node.js 上使用 HTTP 还是 xmlhttprequest?什么时候?
【发布时间】:2016-09-26 05:06:06
【问题描述】:

我仍在探索 REST、node.js 和一般的 Web 开发。我发现使用 AJAX 时主要(如果不总是)使用 xmlhttprequest。据我所知,AJAX 用于异步 Javascript 和 XML。所以我的问题是我是否应该在我的 node.js 项目中使用 xmlhttprequest,就在我想在我的网页上执行异步部分时?还是 node.js HTTP 也有机会异步 javascript?我怎样才能很好地平衡 HTTP 和 xmlhttprequest(或 AJAX)的使用,这样我的所有 REST API 东西就不会太乱?

附:由于 XML,我有点不想使用 AJAX。我听说 XML 在数据中比 JSON 重得多,不再值得使用。这是真的吗?你会推荐我做什么?

【问题讨论】:

    标签: ajax node.js xmlhttprequest


    【解决方案1】:

    节点上非异步?

    您正在尝试构建一个端点 api,因此所有其他不使用异步的情况都应该被排除在外。一旦你的 node.js 项目中有一个非异步代码,它就会冻结整个过程,直到它完成。记住 Node.js 运行一个线程(理论上),这意味着所有其他并发用户都会被冻结。这是让人们非常沮丧的一种方式。

    例如,您需要在来自客户端(假设是浏览器)的获取请求中从 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 中执行异步操作,整个网络应用程序将无响应,因为它也以相同的方式运行,它有一个主循环,除非他们在回调/承诺/可观察的网站将冻结。 Ajax 是一种更简洁/更好的方式来从服务器实现 post/get/put/delete/get:id,然后是 XMLHttpRequest。现在这两个都有一个发送和接收 JSON 的选项,而不仅仅是 XML。由于支持不同的浏览器兼容性规范,Ajax 更安全,因为我相信 XMLHttpRequest 在 IE 和 Safari 中存在一些限制。

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

    一些节点框架

    1. Express 4(我的偏好,api doc真的很好很强大
      社区)
    2. Restify(由 Netflix 使用 - 非常轻巧)
    3. Hapi(从未使用过但听说过)

    一些您可能喜欢的网络浏览器框架

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

    2. reactJS(由大蓝 Facebook 创建)

    3. knockoutJS(简单易行)

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

    【讨论】:

    • 安德烈感谢您的回答。我认为 AJAX 与 XMLHttpRequest 相同。更正确地说,我认为 AJAX 使用 XMLHttpRequest 来执行异步操作。我正在使用快递,也想尝试角度。我没有使用 MEAN 堆栈,但真的想尝试整个堆栈。你的回答真的很有帮助,但让我还是有点困惑。如何在不使用 XmlHttpRequest 的情况下使用 AJAX?
    • 好吧,我想我明白了。我认为只有一个 AJAX 库是 XmlHttpRequest。我发现还有很多其他的图书馆。现在一切都说得通了:)
    • 这是一个很好的 SO 解释,很抱歉让您感到困惑!我试图表达的是这些库围绕 XML 请求并允许更多可用性并提供更多 API 来使用而不是基本 XMLHttpRequest,将其视为扩展 XMLHttRequests -> 更好地回答here 但要解决您的问题xml vs json,你只需要在你提出的请求中指定它。 XMLHttpRequest本质上是使用HTTP协议的浏览器API。
    猜你喜欢
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 2011-08-08
    • 2012-09-22
    • 1970-01-01
    • 2010-12-30
    相关资源
    最近更新 更多