如何在 express 路由器中使用 Axios

How to use Axios inside an express router

我有一个 React 前端向后端发出 axios 请求。

在后台,某些情况下,我需要再发起一次axios请求。

但是 axios.patch 没有 运行:它似乎执行了该行,但之后它不执行 .then.error 行。

我在 router.patch('/stripeUser', (req, res, next) => {} 函数中设置了一个断点,但它没有被触发。

如果我尝试使用 Postman 调用相同的调用,它会成功。

后台代码如下:

router.post('/', async (req, res, next) => {

    const params = {
        user: req.body.data[0].user,
    }

    const customer = params.user.stripeId !== undefined
        ? await stripe.customers.retrieve(params.user.stripeId)
        : await stripe.customers.create({
            email: params.user.email
        });

    if (params.user.stripeId === undefined && customer.id !== undefined) {
        axios.patch('https://xxx.domain.com/users/update', { data: [{ userId: params.user.userId, stripeId: customer.id }] })
            .then((usr) => {
                console.log("User updated: stripeId: " + usr.user.stripeId)
                newCustomer = usr.user;
            })
            .catch(error => {
                console.log(error);
            });
    }

    const intermediate = usr.user.someTransform();

    res(intermediate) ???
    return intermediate ???

次要问题:

如果 axios.fetch 应该 运行,我如何将其结果 usr 传递给程序的其余部分?

axios 补丁调用中缺少结束语。

axios.patch('https://xxx.domain.com/users/update', { data: [{ userId: params.user.userId, stripeId: customer.id }] })
                .then((usr) => {
                    console.log("User updated: stripeId: " + usr.user.stripeId)
                    newCustomer = usr.user;
                })
                .catch(error => {
                    console.log(error);
                });

您是否尝试过使用 await 而不是 then,因为函数可能 return 在 axios 解析请求响应之前您可能无法使用您获取的数据如果您不等待解决方案,则同一函数中的 promise 回调。

const usr = await axios.patch('https://xxx.domain.com/users/update', 
    { data: [{ userId: params.user.userId, stripeId: customer.id }] })
    .catch(error => console.log(error));
const newCustomer = usr.user;
// ...