Node.js 来自express server的axios响应中未填充“数据”字段

Node.js 来自express server的axios响应中未填充“数据”字段,node.js,express,vue.js,get,axios,Node.js,Express,Vue.js,Get,Axios,我正在尝试使用服务器上的Express和后端的Axios从nodejs服务器访问数据 这是我试图达到的终点: 正如您所看到的,当您导航到它时,它实际上会返回数据。但当我尝试使用以下代码访问它时: const BASE_URL = 'http://gentle-bastion-49098.herokuapp.com/api' function getFilterData () { const url = `${BASE_URL}/filters` return axios.get(url

我正在尝试使用服务器上的Express和后端的Axios从nodejs服务器访问数据

这是我试图达到的终点:

正如您所看到的,当您导航到它时,它实际上会返回数据。但当我尝试使用以下代码访问它时:

const BASE_URL = 'http://gentle-bastion-49098.herokuapp.com/api'

function getFilterData () {
  const url = `${BASE_URL}/filters`
  return axios.get(url)
}
我得到这个响应时,数据字段未填充,我希望它包含您在URL中看到的JSON

{
    "data": "",
    "status": 200,
    "statusText": "OK",
    "headers": {},
    "config": {
        "url": "http://gentle-bastion-49098.herokuapp.com/api/filters",
        "method": "get",
        "headers": {
            "Accept": "application/json, text/plain, */*"
        },
        "transformRequest": [null],
        "transformResponse": [null],
        "timeout": 0,
        "xsrfCookieName": "XSRF-TOKEN",
        "xsrfHeaderName": "X-XSRF-TOKEN",
        "maxContentLength": -1
    },
    "request": {}
}
这是后端代码

const express = require('express');
const app = express();
const async = require('async');
const request = require('request');
const http = require('http');
const EventSource = require('eventsource');
const port = process.env.PORT || 8080;

const bodyParser = require('body-parser');
const jsonParser = bodyParser.json()

app.get('/api/filters', function(req, res) {
    let filtersResponse = {
        "ID": "CONV_DATA@IVA",
        "ApplicationName": "InterationsView",
        "Type": "FILT_DETAIL",
        "filters": [{
                "Name": "ChannelType",
                "Values": uniqueFilters.ChannelType,
            },
            {
                "Name": "sessionType",
                "Values": uniqueFilters.sessionType,
            },
            {
                "Name": "Direction",
                "Values": uniqueFilters.Direction,
            },
            {
                "Name": "Status",
                "Values": uniqueFilters.Status,
            },
            {
                "Name": "statusReason",
                "Values": uniqueFilters.statusReason,
            },
        ],
        "minDuration": uniqueFilters.minDuration,
        "maxDuration": uniqueFilters.maxDuration,
        "minData": "2019-08-29T22:28:47.029UTC",
        "maxDate": "2019-08-29T22:28:49.578UTC"
    };

    // Respond with filters
    res.json(filtersResponse);
});
关于为什么即使通过浏览器或邮递员访问数据字段时返回所需数据,数据字段仍不受欢迎,您有什么想法吗?这是后端的问题还是请求方式的问题?谢谢
我还启用了浏览器上的跨组织资源共享。不这样做会导致错误

请尝试以下更改:

 getFilterData().then(response => {
          console.log('filter', response.data)
 })
  .catch(err => {
          alert('Could not get filters ' + err.message.toString())
 })
在服务器代码中,使用res.send将响应发送回客户端,如下所示:

 app.get('/api/filters', function(req, res) {
    let filtersResponse = {
        "ID": "CONV_DATA@IVA",
        "ApplicationName": "InterationsView",
        "Type": "FILT_DETAIL",
        "filters": [{
                "Name": "ChannelType",
                "Values": uniqueFilters.ChannelType,
            },
            {
                "Name": "sessionType",
                "Values": uniqueFilters.sessionType,
            },
            {
                "Name": "Direction",
                "Values": uniqueFilters.Direction,
            },
            {
                "Name": "Status",
                "Values": uniqueFilters.Status,
            },
            {
                "Name": "statusReason",
                "Values": uniqueFilters.statusReason,
            },
        ],
        "minDuration": uniqueFilters.minDuration,
        "maxDuration": uniqueFilters.maxDuration,
        "minData": "2019-08-29T22:28:47.029UTC",
        "maxDate": "2019-08-29T22:28:49.578UTC"
    };

    // Respond with filters
 res.send(
    filtersResponse
  )
 });

我不清楚您是否没有收到axios响应或节点服务器的响应。如果您在获取axios响应时遇到问题,请参阅下面的代码

我使用request npm发出get请求

const request = require('request');

apiUrl = "http://gentle-bastion-49098.herokuapp.com/api/filters"

request.get(
    {
        url: apiUrl,
        json: true
    },
    function (error, response, body) {
        if (error) {
            console.log("Error Occurred :", error);
        }
        console.log("Response Data :", body)

    }
);
上述代码将为您提供以下响应:

{
   "ID":"CONV_DATA@IVA",
   "ApplicationName":"InterationsView",
   "Type":"FILT_DETAIL",
   "filters":[
      {
         "Name":"ChannelType",
         "Values":[
            "Phone",
            "Web-Chat",
            "Google-Assistant"
         ]
      },
      {
         "Name":"sessionType",
         "Values":[
            "nlu-voice",
            "nlu-text"
         ]
      },
      {
         "Name":"Direction",
         "Values":[
            "In"
         ]
      },
      {
         "Name":"Status",
         "Values":[
            "Complete",
            "Started"
         ]
      },
      {
         "Name":"statusReason",
         "Values":[
            "END"
         ]
      }
   ],
   "minDuration":9.7,
   "maxDuration":154.2,
   "minData":"2019-08-29T22:28:47.029UTC",
   "maxDate":"2019-08-29T22:28:49.578UTC"
}
这与您访问链接时在浏览器中获得的内容相同

如果您使用的是axios,则代码为:

const axios = require('axios');

apiUrl = "http://gentle-bastion-49098.herokuapp.com/api/filters"

axios.get(apiUrl)
    .then(function (response) {
        console.log("Response Data :", response.data);
    })
    .catch(function (error) {
        console.log("Error Occurred :", error);
    })
它将给出与上面相同的响应

即使是您编写的代码也会给出响应:

const axios = require('axios');

apiUrl = "http://gentle-bastion-49098.herokuapp.com/api/filters"

axios.get(apiUrl)
    .then(function (response) {
        console.log("Response Data :", response.data);
    })
    .catch(function (error) {
        console.log("Error Occurred :", error);
    })