【问题标题】:Using Express.JS to consume an API使用 Express.JS 使用 API
【发布时间】:2026-02-10 08:15:02
【问题描述】:
var express = require('express');
var app = express();
var path = require('path');
var api = require('./api');


app.get('/', function(req, res){
res.sendFile(path.join(__dirname + '/index.html'));
})


app.listen(8080)
console.log('Server Running');

我知道我们需要 express 模块。我们正在使用 express 函数,我们需要模块路径并将引用存储在变量路径中,并对 api 做同样的事情,但除此之外我有点迷茫。如果我想连接到 twitter API,我会怎么做呢?有人可以解释一下它背后的逻辑,以便我可以更好地学习它并自己使用不同的 API 应用它吗?我衷心感谢您的所有帮助!

【问题讨论】:

    标签: javascript json node.js api express


    【解决方案1】:

    Express 是一个用于组织 Web 应用程序服务器的框架。您打开某些 API 的路由以侦听路径并在必要时响应请求。

    您只能打开 API 供内部使用,即从运行您的应用的浏览器调用。或者您可以将您的 API 暴露给外部世界(例如 twitter API 就是这样做的)。

    要连接到 twitter API,您需要从您的网络服务器发出一个传出请求。有很多方法可以解决这个问题,从原生 nodeJS 包 http https://nodejs.org/api/http.html 到更流行的替代品 request https://github.com/request/request

    这里需要注意的一点是,NodeJS Web 服务器通常比其他语言服务器的限制更少,尤其是在组织应用程序和代码架构时。因此,初学者的问题更多。欢迎提出更多问题。

    应用的主要用途

    var app = express()

    是监听路由(它也用于渲染页面,添加中间件等),仅此而已。

    所以假设你的 UI 上有一个按钮,它允许你连接到 twitter API。因此,在单击时,您向自己的服务器发出 GET 请求,发送到 /api/twitter/connect 。 在您的服务器上,您按如下方式侦听此路径:

    var request = require('request'); //assuming you installed this module
    app.get('/api/twitter/connect', function(req, res){
      request(TWITTER_API_URL + API_KEYS, function(err, body){
          res.json(body); //res is the response object, and it passes info back to client side
      });
    });

    【讨论】:

    • 所以如果我 npm install request 我将如何请求 twitter api(以此为例)? app.req(url to the api?)
    • 更新了我的回复。您似乎对 express 应用的用途感到困惑 :)
    • 因此,如果我想在单击按钮后或在 div 中发布来自 api 的信息,我会使用 app.post 还是 app.get?我会包括正文解析器还是文本解析器?他们的目的到底是什么?
    • app.post 需要 POST 请求。 app.get 期望 GET 请求。 expressjs.com/en/4x/api.html 你可以查看官方 API。至于解析器,它们作为单独的模块提供,与 expressJS 作为中间件很好地配合
    • 例如 app.use(bodyParser.urlencoded({extended: false })); app.use(bodyParser.json({ limit: '20mb' }));
    【解决方案2】:

    您可以使用“请求”包来发送请求。但在跨域请求的情况下,您必须使用“HTTPS”而不是“HTTP”。您可以像这样根据您的请求类型配置您的请求..

     //Load the request module
    var request = require('request');
    
    //Lets configure and request
    request({
        url: 'https://example.com/abc/demo', //URL to hit
        qs: {from: 'example', time: +new Date()}, //Query string data
        method: 'GET', // specify the request type
        headers: { // speciyfy the headers
            'Content-Type': 'MyContentType',
            'Custom-Header': 'Custom Value'
        },
        body: 'Hello Hello! String body!' //Set the body as a string
    }, function(error, response, body){
        if(error) {
            console.log(error);
        } else {
            console.log(response.statusCode, body);
        }
    });
    

    除此之外,还有其他方法可以做到这一点。对于 twitter,您还可以查看名为“twitter”的模块

    【讨论】:

    • 请求已弃用。使用更好的替代品,例如“Axios”