node.jsexpressfetchsurveymonkey

SurveyMonkey API Create a Survey using NodeJS


I created a small server using NodeJS/Express and I'm using node-fetch to interact with SurveyMonkeys API. I currently have two surveys on my account which I can view through their Postman collection. But when I try to use my own endpoints, it doesn't seem to work. The GET request to view all of the surveys returns a status code of "200" but responds with:

{
    "size": 0,
    "timeout": 0
}

The POST request to create a survey gives me a status code of "400" but returns the same response. Here is my code so far.

const router = require("express").Router();
const fetch = require("node-fetch");
const TOKEN = process.env.SM_ACCESS_TOKEN;
const BASEURL = process.env.SM_BASEURL;

const options = method => ({
  headers: {
    Authorization: `Bearer ${TOKEN}`,
    "Content-Type": "application/json",
    method: method
  }
});

/*
GET a list of surveys
*/
router.get("/", async (req, res) => {
  try {
    const surveys = await fetch(`${BASEURL}surveys`, options("GET"));
    console.log(surveys);
    if (surveys) {
      return res.status(200).json(surveys);
    }
  } catch (err) {
    console.log(err);
    res.status(500).send({ message: "Server error", err });
  }
});

router.post("/create-survey", (req, res) => {
  const surveyData = req.body;

  fetch(`${BASEURL}surveys`, {
    method: "POST",
    body: surveyData,
    headers: {
      Authorization: `bearer ${TOKEN}`,
      "Content-Type": "application/json"
    }
  })
    .then(data => {
      return res.status(data.status).json(data);
    })
    .catch(err => console.log(err));
});

module.exports = router;

Additional information: I am able to complete all of these actions using the POSTMAN collection provided by SurveyMonkey with my Access Token. BASEURL = "https://api.surveymonkey.com/v3/". ServeyData = { "title": "Some Title" }


Solution

  • Resolved this issue by switching out of node-fetch and instead using axios. Could be the fetch vs xhr request I think.