I'm using node-fetch to send some json data to an IFTTT restpoint. The data is successfully sent to the endpoint, but I'm getting an error in my NodeJS console. As you can see, it returns undefined then says there was an invalid json response body. I inspected the body and it looks fine to me.
What is the problem?
async function checkTemperatureRange() {
try {
const temperatureSettings = await getTemperatureSetting();
const currentTemperature = await getCurrentTemperature();
if (currentTemperature < temperatureSettings.min_temp || currentTemperature > temperatureSettings.max_temp) {
console.log('Temp NOT in range!');
const body = { value1: currentTemperature };
fetch('https://maker.ifttt.com/trigger/temp_reading/with/key/abc123', {
method: 'post',
body: JSON.stringify(body),
headers: { 'Content-Type': 'application/json' },
})
.then(function (res) {
res.json()
})
.then(function (json) {
console.log(json)
})
.catch(function (err) {
console.log('node-fetch error: ', err)
});
}
else {
console.log('Temp in range :)');
}
} catch(error) {
console.error(error);
}
}
Error
undefined
(node:7488) UnhandledPromiseRejectionWarning: FetchError: invalid json response body at https://maker.ifttt.com/trigger/temp_reading/with/key/abc123 reason: Unexpected token C in JSON at position 0
at C:\Users\leke\dev\code-training-camp-demo\node_modules\node-fetch\lib\index.js:272:32
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
(node:7488) UnhandledPromiseRejectionWarning: Unhandled promise rejection.
This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:7488) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Edit
If I console.log(res)
I get
Response {
size: 0,
timeout: 0,
[Symbol(Body internals)]:
{ body:
PassThrough {
_readableState: [Object],
readable: true,
domain: null,
_events: [Object],
_eventsCount: 3,
_maxListeners: undefined,
_writableState: [Object],
writable: false,
allowHalfOpen: true,
_transformState: [Object] },
disturbed: false,
error: null },
[Symbol(Response internals)]:
{ url: 'https://maker.ifttt.com/trigger/temp_reading/with/key/abc123',
status: 400,
statusText: 'Bad Request',
headers: Headers { [Symbol(map)]: [Object] },
counter: 0 } }
So is it to do with the Bad request?
Whoops, I forgot the return
, and also IFTTT returns text()
, not json.
.then(function (res) {
return res.text();
})