【问题标题】:multiple url variable async/await axios多个 url 变量 async/await axios
【发布时间】:2021-09-22 19:11:43
【问题描述】:

可能这是一个非常愚蠢的问题,我是 Node.js 和 javascript 的新手,所以如果问题没有得到正确解释或答案很简单,请原谅我......

我正在尝试通过 url 发送 2 个变量...当我只发送 1 个变量 (artist=${term}) 时,一切都很好,但我真的不知道如何通过 url 发送 2 个变量网址(&artist=${term1}&album=${term2})

到目前为止,我一直在处理这段代码,其中 1 个变量运行良好......但我不知道如何向请求中添加第二个或第三个变量:

文件 1:“./services/albumInfo.js”

import { BRV_API } from '../../config';
import axios from 'axios';
import dotenv from 'dotenv';

const ALBUM_INFO = 'method=album.getinfo';
dotenv.config();

const doRequest = async (url) => {
    return await axios.get(`${BRV_API}/${url}&api_key=${process.env.API_KEY}&format=json`);
};

export const infoAlbum = async (term) => {
    return await doRequest(`?${ALBUM_INFO}&artist=${term}`);
};

文件 2:“./repositories/albumInfo.js”

import { infoAlbum } from '../repositories/albumInfo';
import status from 'http-status';

export const albumInfo = async (req, res, next) => {
    try {
        const { query } = req;
        
        const { data } = await infoAlbum(query.name);
        
        const response = data;

        res.status(status.OK).send(response);

    } catch (error) {

        next(error);

    }
    
};

我知道我的问题出在这部分代码(我猜)

export const infoAlbum = async (term) => {
    return await doRequest(`?${ALBUM_INFO}&artist=${term1}&album=${term2}`);
};

我一直在寻找,我已经看到了一些解决方案,like this one,但我只是不明白这些解决方案或如何应用到我的代码(对不起,我对此很陌生)

有好心人可以帮助这个新手吗? (如果也能解释解决方案的原因,理解,将是惊人的!)

提前致谢!!

【问题讨论】:

  • 您也可以尝试输出您正在使用的完整网址,就像在这张图片中一样? i.stack.imgur.com/J6fsj.png 只是为了确保
  • @Alex028502 我相信问题不在 const { data } 中;按级别,请求的 url 是错误的。根据你的图片,输出是:"full url is /v1/infoAlbum?method=album.getinfo&artist=lenka&album=lenka&api_key=c6......b9&format=json" is repeating the artist变量两次...如何捕获变量专辑?

标签: javascript node.js asynchronous async-await axios


【解决方案1】:

axios提供的参数可以自定义添加如下

const your_url = process.env.URL
const infoAlbum = await axios.get(your_url,{
               params: { 
                    artist: term,
                    album: term2,
                    api_key: process.env.API_KEY,
                    format:'json'
               }
          })

console.log(infoAlbum.data.args)

注意:your_url 没有更多参数。

【讨论】:

  • 给我一个错误:SyntaxError: ../src/repositories/albumInfo.js: Unexpected reserved word 'await'. (20:18) 19 | const your_url = process.env.URL > 20 | const infoAlbum = await axios.get(your_url,{ | ^ 21 | params: { 22 | method: 'album.getinfo', 23 | artist: term, at Parser._raise (../node_modules/@babel/parser/src/parser/error.js:134:45) loc: Position { line: 20, column: 18 }, pos: 634, code: 'BABEL_PARSE_ERROR', reasonCode: 'UnexpectedReservedWord' }
  • 顺便说一句,我的节点版本:“node --version => v14.17.1”(我已经看到这个问题通常是由于节点的旧版本引起的,但不是我的情况)。跨度>
  • 不用'await'也可以写,'await'用在异步函数中
【解决方案2】:

所以,

我找到了一个非常难看的解决方案,但到目前为止正在工作,如果有人有更好的选择,会很高兴知道:

文件 1:repositories/albumInfo.js,我刚刚添加了控制台(根据 @Alex028502 的建议),以了解代码返回的内容:

import { BRV_API } from '../../config';
import axios from 'axios';
import dotenv from 'dotenv';

const ALBUM_INFO = 'method=album.getinfo';
dotenv.config();

const doRequest = async (url) => {
    const fullurl = `${BRV_API}/?${ALBUM_INFO}${url}&api_key=${process.env.API_KEY}&format=json`;
    console.log('full url is', fullurl);
    return await axios.get(fullurl);
};

export const infoAlbum = async (term) => {
    return await doRequest(`&${term}`);
};

文件 1:services/albumInfo.js:我改变 'infoAlbum' 的行为以从他这边发出请求:

import { infoAlbum } from '../repositories/albumInfo';
import status from 'http-status';

export const albumInfo = async (req, res, next) => {
    try {
        const { query } = req;

        console.log(query);
        
        const { data } = await infoAlbum('artist=' + query.artist + '&album=' + query.album);
        
        const response = data;

        res.status(status.OK).send(response);

    } catch (error) {

        next(error);

    }
    
};

我知道这可能不是摆脱问题的最佳方法,但到目前为止我所拥有的就是......关于如何捕获 url 请求的第二个或第三个参数的任何其他更好的选择和然后将它们添加到最终 url?

最好的!

【讨论】:

    猜你喜欢
    • 2018-02-15
    • 2020-08-02
    • 2019-07-01
    • 2019-12-18
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2021-09-11
    相关资源
    最近更新 更多