BaiLinfeng
V2EX  ›  Node.js

node.js 怎么做服务器端来请求第三方 api

  •  
  •   BaiLinfeng · Jun 19, 2020 · 8513 views
    This topic created in 2338 days ago, the information mentioned may be changed or developed.
    node.js 怎么做服务器端来请求第三方 api,在让前端直接请求服务器拿数据
    40 replies  •  2020-06-24 22:18:54 +08:00
    saozhu
    saozhu
    Jun 19, 2020❤️1
    1
    你的标题原封不动就能搜出一堆教程
    wenzichel
    wenzichel
    Jun 19, 2020
    2
    1. 用 express 或者 koa 起一个服务器;
    2. 用 axios 请求第三方接口的数据;
    3. 返回到前端;

    req.pipe(api).pipe(res);
    BaiLinfeng
    BaiLinfeng
    OP
    Jun 19, 2020
    3
    @saozhu 我搜了,没有太多的理解 node,有点吃不消
    BaiLinfeng
    BaiLinfeng
    OP
    Jun 19, 2020
    4
    @wenzichel express 我使用的,找流量很多教程看不进去,没有一个类似的 demo,都是基础使用 api 方法,我想做的是服务器端带 token 和请求头,然后让前端在来请求服务器、。
    zhuweiyou
    zhuweiyou
    Jun 19, 2020
    5
    起个 express / koa 之类的服务,用 axios / request / superagent 之类的库 去请求
    sedgwickz
    sedgwickz
    Jun 19, 2020
    6
    [3rd api/scraper] --> your server --> [save cache/database] --> your api --> your client

    这个和 node 貌似没太多关系,任何能做服务端的语言都可以这么搞
    BaiLinfeng
    BaiLinfeng
    OP
    Jun 19, 2020
    7
    @zhuweiyou 目前我使用的 express 前端请求用的是 axios,只把服务器启动成功了,就无从下手了,看了 node 和 express 官网都是一些 api 的使用,没有找到相关需求的 demo 。
    BaiLinfeng
    BaiLinfeng
    OP
    Jun 19, 2020
    8
    @sedgwickz 目前我使用的 express 前端请求用的是 axios,只把服务器启动成功了,就无从下手了,看了 node 和 express 官网都是一些 api 的使用,没有找到相关需求的 demo 。你说的这个是什么黑科技完全看不懂
    dfourc
    dfourc
    Jun 19, 2020
    9
    @BaiLinfeng #8 还黑科技。。。很常见的流程
    zhuweiyou
    zhuweiyou
    Jun 19, 2020
    10
    @BaiLinfeng 服务器请求第三方,也可以用 axios
    BaiLinfeng
    BaiLinfeng
    OP
    Jun 19, 2020
    11
    @galikeoy 表示看不懂,还是看中文直接,是我太菜了
    zhw2590582
    zhw2590582
    Jun 19, 2020
    12
    菜的话,那就从基础学起,别一下子深入
    BaiLinfeng
    BaiLinfeng
    OP
    Jun 19, 2020
    13
    @zhuweiyou 我现在服务器端一点思路都没有,启动服务成功后就放了一个 app.get("/"(req,res)=>{ses.send("响应给前端的内容")})
    BaiLinfeng
    BaiLinfeng
    OP
    Jun 19, 2020
    14
    @zhw2590582 主要是自己的需求很清楚,后端实现起来就棘手,都是临时的用 node.js
    rockjike
    rockjike
    Jun 19, 2020
    15
    app.get("/" async (req,res)=>{const data = await axios.get(/url )res.send("响应给前端的内容" + data)}
    easonHHH
    easonHHH
    Jun 19, 2020
    16
    const axios = require('axios');

    ......

    app.get("/",async (req,res)=>{
    const result = await axios.get((具体内容看 axios 文档))
    ses.send("响应给前端的内容")
    })

    把 result 筛选一下放到 send()里面不就好了吗
    TomatoYuyuko
    TomatoYuyuko
    Jun 19, 2020
    17
    脚手架搭起来 express,安装 axios,express 里写个对应的路由给前端调用,在路由回调里请求第三方,处理第三放返回,再返回给前端
    BaiLinfeng
    BaiLinfeng
    OP
    Jun 19, 2020
    18
    @rockjike 那还需要些路由吗?有很多不一样的路径地址
    bi531334444
    bi531334444
    Jun 19, 2020❤️1
    19
    那建议你用 eggjs 跟着文档一步步来就完了
    BaiLinfeng
    BaiLinfeng
    OP
    Jun 19, 2020
    20
    @easonHHH 需要用到路由吗?有不同的路径地址,我直接把地址传参进来应该用什么办法
    ChanKc
    ChanKc
    Jun 19, 2020 via Android
    21
    哈哈,你的标题就错了
    你要找的是一个在 node 环境下的客户端库,而不是服务端
    axios 就是这样的客户端
    BaiLinfeng
    BaiLinfeng
    OP
    Jun 19, 2020
    22
    @ChanKc 标题没有错哦,我要的就算在服务器搭建接口来请求第三方 api
    maplelin
    maplelin
    Jun 19, 2020
    23
    @BaiLinfeng #20 楼主没写过后端吗,这些都是后端技能的基础,如果都没有接触过的话,那你估计得一段时间去学了,建议对着文档一点点撸
    BaiLinfeng
    BaiLinfeng
    OP
    Jun 19, 2020
    24
    @maplelin 后端没学过,还是看在 node 是基于 js 才选择的 node 来研究
    npm
    npm
    Jun 19, 2020
    25
    感觉你要不用 egg.js 吧?

    express 很多都得要自己封装,而 egg.js 很多已经帮你封装好了,并且中英文文档都很详细。

    YouTube 和 B 站上也有 egg.js 的教程
    BaiLinfeng
    BaiLinfeng
    OP
    Jun 19, 2020
    26
    @npm 我选择的是 node+express+axios,主要是自己来使用的接口,所以才自己来搭建的。
    youxiachai
    youxiachai
    Jun 19, 2020
    27
    ls 说了这么多...lz 没听懂..我说一个比较野的路子....
    用 node 调 curl...
    curl 或者 wget 总会用了吧...
    BaiLinfeng
    BaiLinfeng
    OP
    Jun 19, 2020
    28
    @youxiachai 我正在用楼上的铁汁们说的办法,实际上是直接把他们的代码扣下来 const axios = require('axios');

    ......

    app.get("/",async (req,res)=>{
    const result = await axios.get((具体内容看 axios 文档))
    ses.send("响应给前端的内容")
    })
    ,我有不同的路径需要单独写路由吗?
    npm
    npm
    Jun 19, 2020
    29
    @BaiLinfeng 嗯,实现了就好
    youxiachai
    youxiachai
    Jun 19, 2020
    30
    @BaiLinfeng 这个应该是个工具方法,,你的不同路径调用一下这个方法就好了....
    96412hj
    96412hj
    Jun 19, 2020
    31
    你说的是转发吧,任何一个服务器语言都可以转发的呢,你 google,nodejs 转发接口 demo,一大堆
    guanhui07
    guanhui07
    Jun 19, 2020
    32
    用 koa2 request 包
    libook
    libook
    Jun 19, 2020
    33
    直接使用 Node API 来发起请求:
    HTTP: https://nodejs.org/dist/latest-v14.x/docs/api/http.html#http_http_request_options_callback
    HTTPS: https://nodejs.org/dist/latest-v14.x/docs/api/https.html#https_https_request_options_callback
    入参和出参是什么 Class 的对象就看对应 Class 的文档。另外 Node 异步非阻塞以及 Callback 机制得懂。

    广泛使用的第三方请求库 Axios:
    https://github.com/axios/axios
    得懂得 JS 的 Promise 、async/await 。

    JS 基础不行的话看 MDN: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide
    Node 基础不行的话看 Guide,花不了多长时间: https://nodejs.org/en/docs/guides/

    作为程序员英语得过关。

    你可以在学会走之前先学会跑,但是总得先学会如何动腿; Node 虽然上手很简单,但是基本的特性还是得学的,API 文档还是得浏览一下的。

    不积跬步,无以至千里。
    easonHHH
    easonHHH
    Jun 19, 2020
    34
    用不同的接口你想办法把配置传到后端呗,方法多了去了,通过路由,GET 参数,POST 内容都行啊
    1 、根据路径区分就用 app.use('/a/b')这里面配置,支持正则表达和:xx 等匹配方法
    // GET /file/javascripts/jquery.js
    console.dir(req.params[0])
    // => 'javascripts/jquery.js'
    2 、GET 参数方法:
    // GET /search?q=tobi+ferret
    console.dir(req.query.q)
    // => 'tobi ferret'
    3 、还可以用 POST 方法
    app.use(express.json()) // for parsing application/json
    app.use(express.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencoded

    app.post('/profile', function (req, res, next) {
    console.log(req.body)
    res.json(req.body)
    })
    这些都是文档里面写得清清楚楚的,你看一下文档里面 request(req)的属性吧
    https://expressjs.com/zh-cn/4x/api.html#req.body
    yinjunjian0
    yinjunjian0
    Jun 19, 2020
    35
    我寻思看请求库的文档不是更快更好理解吗
    Yourshell
    Yourshell
    Jun 19, 2020
    36
    这不是反代吗
    ChanKc
    ChanKc
    Jun 19, 2020 via Android
    37
    @BaiLinfeng 请求别人就是客户端
    JackHuang90
    JackHuang90
    Jun 19, 2020
    38
    axios 或者 自己封装 fetch,fetch 我觉得更自由。
    zhengdai1990
    zhengdai1990
    Jun 19, 2020
    39
    直接 pipe
    BaiLinfeng
    BaiLinfeng
    OP
    Jun 24, 2020
    40
    当时想回复的消息,和需求实现的想法太多了,但是 V2EX 禁止发言太快
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   968 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 22:04 · PVG 06:04 · LAX 14:04 · JFK 17:04
    ♥ Do have faith in what you're doing.