以同构方式处理 HTTP 请求 javascript

Handling HTTP requests in isomorphic javascript

我有一个纯前端 javascript 项目,其中包含许多模型,这些模型封装了与各种 RESTful Web 服务的不同交互。我的目标是将这些模型拉到它们自己的 npm 模块中,以便让它们在我正在编写的新节点应用程序中使用服务器端。

这些模型使用了 XMLHttpRequest 对象,这显然在服务器上是未定义的。我不能在我的模型中要求('http'),因为当我尝试为客户端构建时 browserify 会抛出错误。

我如何处理同时适用于服务器和客户端的 HTTP 请求?我想要的是:

var ajax = {
    get: function (url, opts) {
        if (typeof XMLHttpRequest === 'undefined') {
            // is node app
            var http = require('http');
            ...
        } else {
            // is browser app
            var xhr = new XMLHttpRequest();
            ...
        }
    },
    post: ...
};

一个标准是Superagent。无论您是在客户端 (xhr) 还是服务器 (http),API 都是相同的,因此无需重复代码或检查要使用的协议。还有一些库也可以将它变成 promises,这真的很棒。