node.js 怎么做服务器端来请求第三方 api - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
BaiLinfeng
V2EX    Node.js

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

  •  
  •   BaiLinfeng 2020-06-19 09:17:06 +08:00 7712 次点击
    这是一个创建于 1943 天前的主题,其中的信息可能已经有所发展或是发生改变。
    node.js 怎么做服务器端来请求第三方 api,在让前端直接请求服务器拿数据
    40 条回复    2020-06-24 22:18:54 +08:00
    saozhu
        1
    saozhu  
       2020-06-19 09:21:25 +08:00   1
    你的标题原封不动就能搜出一堆教程
    wenzichel
        2
    wenzichel  
       2020-06-19 09:22:24 +08:00
    1. 用 express 或者 koa 起一个服务器;
    2. 用 axios 请求第三方接口的数据;
    3. 返回到前端;

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

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

    ......

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

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

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

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

    ......

    app.get("/",async (req,res)=>{
    const result = await axios.get((具体内容看 axios 文档))
    ses.send("响应给前端的内容")
    })
    ,我有不同的路径需要单独写路由吗?
    npm
        29
    npm  
       2020-06-19 10:07:07 +08:00
    @BaiLinfeng 嗯,实现了就好
    youxiachai
        30
    youxiachai  
       2020-06-19 10:09:15 +08:00
    @BaiLinfeng 这个应该是个工具方法,,你的不同路径调用一下这个方法就好了....
    96412hj
        31
    96412hj  
       2020-06-19 10:09:17 +08:00
    你说的是转发吧,任何一个服务器语言都可以转发的呢,你 google,nodejs 转发接口 demo,一大堆
    guanhui07
        32
    guanhui07  
       2020-06-19 10:11:57 +08:00
    用 koa2 request 包
    libook
        33
    libook  
       2020-06-19 10:22:44 +08:00
    直接使用 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
        34
    easonHHH  
       2020-06-19 10:26:23 +08:00
    用不同的接口你想办法把配置传到后端呗,方法多了去了,通过路由,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
        35
    yinjunjian0  
       2020-06-19 11:08:05 +08:00
    我寻思看请求库的文档不是更快更好理解吗
    Yourshell
        36
    Yourshell  
       2020-06-19 12:27:00 +08:00
    这不是反代吗
    ChanKc
        37
    ChanKc  
       2020-06-19 12:45:09 +08:00 via Android
    @BaiLinfeng 请求别人就是客户端
    JackHuang90
        38
    JackHuang90  
       2020-06-19 16:53:23 +08:00
    axios 或者 自己封装 fetch,fetch 我觉得更自由。
    zhengdai1990
        39
    zhengdai1990  
       2020-06-19 22:31:46 +08:00
    直接 pipe
    BaiLinfeng
        40
    BaiLinfeng  
    OP
       2020-06-24 22:18:54 +08:00
    当时想回复的消息,和需求实现的想法太多了,但是 V2EX 禁止发言太快
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     924 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 22:05 PVG 06:05 LAX 15:05 JFK 18:05
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86