【问题标题】:Using the same query params multiple times in Express/Node在 Express/Node 中多次使用相同的查询参数
【发布时间】:2020-07-23 02:28:01
【问题描述】:

我正在与 Express 合作,为我的 React 应用程序创建一个端点。该应用程序将允许用户搜索多家公司以查找每家公司的联系人列表。他们可以一次搜索多家公司,因此在某些情况下,我需要在我的 get 中多次使用相同的查询参数:

https://api.getallthesecompanies.com/people.json?companyname=stackoverflow&companyname=github&companyname=walmart

现在这就是我的代码的样子。在上述情况下,它只会拉取 stackoverflow 的结果,因为它是第一个。它将我所有的公司名称变成一个数组而不是对象。我尝试在等号之前和公司名称周围使用方括号,但名称仍以相同的方式分组到一个数组中。

app.get('/api/accounts/people', (req, res) => {
    const accountId = req.query.account_id
    return axios({
        method: 'get',
        url: `https://api.getallthesecompanies.com/people.json?account_id=${accountId}`,
    }).then((response) => {
        res.json(response.data)
})}

【问题讨论】:

  • 抱歉,数组有什么问题?你不能映射它并获取每个 id 的联系人列表吗?
  • 对不起 - 意思是说它将公司名称作为数组中的单个字符串返回,例如 ["stackoverflow, github, walmart"] 而不是 ["stackoverflow", "github" , "沃尔玛"]
  • 啊,好的。那是因为查询类似于“?account_id=id1&id2&id3...?因为我认为如果查询类似于“?account_id=id1&account_id=id2&account_id=id3...”,那么它会给你一个单独的名称数组。当然, 除非某些公司名称中有逗号,否则即使使用第一个版本,您也可以执行 account_id[0].split(',') 并拥有一个新的个人名称数组。
  • 谢谢!分裂奏效了。我还需要在我的 get 请求中添加一个 params 对象,它将 account_ids 作为数组接收。非常感谢您的帮助:)

标签: javascript node.js api express axios


【解决方案1】:

建议

在 get BODY 中将搜索参数作为数组传递。希望对您有所帮助。

// Add async to route handler   
app.get('/api/accounts/people', async (req, res) => {
    const accountIds = req.body; // Get from body - watch out for edge cases
    try {
        const promises = [];
        accountIds.forEach(id => {
            promises.push(axios.get(`https://api.getallthesecompanies.com/people.json?account_id=${id}`))
        });

        // Resolve all promises (calls to external api)
        const responses = await Promise.all(promises);

        // Merge the responses together
        const mergedResponseData = responses.map(response => response.data).reduce((prev, next) => {
            prev = [...prev, ...next];
            return prev;
        }, []);

        // return data to React App
        res.status(200).json(mergedResponseData);
    } catch (error) {
        throw new Error(error);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 2013-03-28
    • 2016-08-21
    • 2013-06-08
    • 2013-07-04
    • 1970-01-01
    相关资源
    最近更新 更多