【问题标题】:Executing Axios Logic From It's Own File Within Express Server Route从 Express Server Route 中自己的文件执行 Axios 逻辑
【发布时间】:2021-06-16 17:59:39
【问题描述】:

我对 Express 还很陌生,所以我想了解一些复杂的问题。

现在我正在使用 Axios 在到达特定路线时发布一些数据。

当我在路由本身内部执行 Axios 发布请求时,它可以正常工作并注销响应,即

 server.post('/inventory-request', (req, res) => {

    axios.post(base_api_url, data, {
      headers: headers
    })
    .then((response) => {
      console.log(response.data)
    })
    .catch((error) => {
      console.log(error)
    })
        
    })

然后我将 axios 请求移到了它自己的文件“./lib/inventory-request.js”中(我省略了一些配置信息和请求信息,但我可以确认它们都是正确且有效的)

const axios = require('axios').default;
const base_api_url = 'some_url';

module.exports = function(){

  const headers = {
          "Content-Type": "application/graphql"
        }

  let data = `{
        }`

  axios.post(base_api_url, data, {
      headers: headers
    })
    .then((response) => {
      return response.data
    })
    .catch((error) => {
      return 'no'
    })
  
};

更新后的路线如下所示:

server.post('/inventory-request', (req, res) => {

       let inventoryData = inventoryRequest()

       console.log(inventoryData)
        
    })

现在当我到达路线时,我只是在日志中得到“未定义”。

我知道这个问题与 async/await 相关,并且 console.log 在 Axios 帖子完成之前就被触发了,我只是很难在网上找到关于如何正确处理这两个问题的文档文件(server.js 文件和 lib/inventory-request.js 文件)。

【问题讨论】:

    标签: javascript node.js reactjs express


    【解决方案1】:

    对于遇到类似问题的任何人,这是我用来使其正常工作的方法:

    -server.js 变成

     server.post('/inventory-request', async (req, res) => {
    
       let inventoryData = await inventoryRequest()
            
     })
    
    

    inventoryRequest.js 变成

    const axios = require('axios').default;
    const base_api_url = 'some_url';
    
    module.exports = function(){
    
      const headers = {
              "Content-Type": "application/graphql"
            }
    
      let data = `{
            }`
    
      return axios.post(base_api_url, data, {
          headers: headers
        })
        .then((response) => {
          return response.data
        })
        .catch((error) => {
          return 'no'
        })
      
    };
    

    所以只需在 server.js 函数中使用 async/await 并返回整个 axios 请求,而不仅仅是操作文件中的 axios 响应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      相关资源
      最近更新 更多