Node.js Express中使用axios实现同步请求的方法

作者:夜航船时间:2026-10-26 12:47:19浏览:130

本文介绍在Node.js Express框架中,如何利用axios结合async/await语法实现看似同步的请求流程。通过封装Promise对象并在控制器中调用,配合前端setTimeout延迟刷新,解决特定场景下需要等待接口返回结果后再更新页面的需求。

axios同步请求的实现思路

axios通常用于处理异步请求,但在某些特殊场景下,开发者可能需要实现同步请求的效果。那么该如何实现呢?

首先,需要定义一个名为syncAxios的方法。

封装syncAxios方法

let axios = require('axios');

exports.syncAxios = function (obj = {}) {
  let url =  "http://www.rrbay.com/api/";

  return new Promise((resolve, reject) => {
    axios(url, {
      method: 'POST',
      timeout: 5000,
      params: {
        sProcName: obj.sProcName,
        idNo: obj.id,
        userName: obj.qq,
        overTime: obj.endTime
      }
    }).then((res) => {
      resolve(res.data);
    }).catch((error) => {
      reject(error)
    })
  })
};

接着,在Express的控制器中进行调用。

控制器中的调用示例

exports.check = function (req, res) {
  //定义async方法体
  XXXMode.findById(id).populate('author').exec(async function (err, result) { 
    let dataCode = false;
    if(result.status ==0){
        //同步调用
      await baseapi.syncAxios({
          sProcName: 'Update',
          id: '000000-1111-2222-3333-9999999',
          qq: '391502069',//result.author.name,
          endTime:  '2022/12/31 11:39:05'//result.EndTime
        }).then((data) => {
          console.log(data, 'res');
        }).catch((err) => {
          console.log(err && err.stack);
        });

    }
    result.save(function (err, onewxtob) {
      if (req.xhr) {
        return res.json({
          status: !err
        })
      }
    });
  });
};

在前端视图层使用Jade模板引擎时,需要在请求check之后,通过延迟刷新页面来显示请求结果。

前端延迟刷新处理

setTimeout(function () {
   $(location).attr('href',window.location.href)
}, 1000)

这里利用setTimeout实现了页面的延迟加载与刷新效果。结合控制器的交互逻辑,最终达成了同步操作的效果。

作者最新文章