Json data parses incorrectly - node.js

React JS front end, Express JS middleware, Laravel Backend
When the data is sent from react to express then to laravel the data is not parsed in laravel in the correct format.
React Front end posting to express
const data = await fetch(`${config.appURL}/deployment/stage1`, {
method: "POST",
body: JSON.stringify(form),
credentials: "include",
headers: {
"Content-Type": "application/json",
},
});
Express Mid
router.post("/", (req, res) => {
if (req.session.token) {
request(
{
method: "POST",
uri: `${config.apiURI}/deployment/stage1`,
body: JSON.stringify(req.body),
headers: {
Authorization: `Bearer ${req.session.token}`,
"Content-Type": "application/json",
},
},
Laravel
public function stage1(Request $request){
return $request->all();
Tried json_decode, receive error expects param 1 to be string, tried accessing the variable in laravel $request->my_field, receive error can not access of none object

Resolved, I was missing the accept header
router.post("/", (req, res) => {
if (req.session.token) {
request(
{
method: "POST",
uri: `${config.apiURI}/deployment/stage1`,
body: JSON.stringify(req.body),
headers: {
Authorization: `Bearer ${req.session.token}`,
"Content-Type": "application/json",
"Accept": "application/json"
},
},

Related

With resumable uri i got by google drive api post request, there is no response while uploading with that uri

resumable uri: https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable&upload_id=ADPycducJGWQ62n6E0K5mD81RGJw-0eIsga8dBxarfSY_2Pk5hFJhBs230Q8ay
PUT request:
let postFile = await axios.request(
{
method: "PUT",
url: resumableURI,
headers: {
Authorization: `Bearer ${process.env.GOOGLE_ACCESS_TOKEN}`,
"Content-Length": req.files.muploadedFile.size,
},
body : bufferToStream(buffer)
}
)
console.log(postFile.data)
Is there any problem with code
After a while im getting this:
That’s an error.
Your client has taken too long to issue its request.
That’s all we know.
#kevintechie Thank you for response. Problem here is with axios put request. The code below works
axios.put(
`${resumableURI}`,
{
bufferToStream(buffer)
},{
headers: {
Authorization: `Bearer ${process.env.GOOGLE_ACCESS_TOKEN}`,
"Content-Length": req.files.muploadedFile.size,
"Content-Range": `bytes 0-${req.files.muploadedFile.size-1 }/${req.files.muploadedFile.size}`
}
}
).then( resp => {
console.log(resp)
}).catch( e => console.log(e))

How to change port using fetch and request react js?

This is the code I took from my professor's tutorial. LoginComp is just {username: '', password: ''}
const request = new Request("/users/login", {
method: "post",
body: JSON.stringify(loginComp),
headers: {
Accept: "application/json, text/plain, */*",
"Content-Type": "application/json"
}
});
// Send the request with fetch()
fetch(request)
.then(res => {
if (res.status === 200) {
return res.json()
}
})
.catch(error => {
console.log(error);
});
I have a backend server running at localhost:5000 with post routes at localhost:5000/users/login. The issue with this code is it assumes users/login is at localhost 3000 so I would get this error in console:
POST http://localhost:3000/users/login 404 (Not Found)
How do I make it so its localhost:5000 not 3000 (the client server)
You have to add http://localhost:5000/ to your url.
const request = new Request("http://localhost:5000/users/login", {
method: "post",
body: JSON.stringify(loginComp),
headers: {
Accept: "application/json, text/plain, */*",
"Content-Type": "application/json"
}
});

Nodejs send data in headers using request

The server only accepts data sent in the headers.
Doing it using this code the server is getting empty object:
const request = require('request')
request.post({
url: 'https://.....',
body: { userid: 'cris', gameid: '12' },
headers: { "Content-Type": "application/x-www-form-urlencoded"}
})
Doing it with Postman, the server gets the correct data:
How can i use the code to send the data in the headers?
Edit:
A printscreen with server info displayed in the browser, should help.
Try this
const request = require('request')
request.post({
url: 'https://.....',
headers: { 'Content-Type': 'application/json', 'Accept': 'application/json, text/plain', 'userid':'cris', 'gameid':'12'}
})
Try this
const request = require('request')
request.post({
url: 'https://.....',
body: JSON.stringify({ userid: 'cris', gameid: '12' }),
headers: { "Content-Type": "application/x-www-form-urlencoded"}
})
try this
body: { "userid": "cris", "gameid": "12" }

How to set raw post request for nodejs

I'm trying to send post request from nodejs, but unable to send through node. The request I have already tested on Postman,
Here is my Nodejs Code:
var rp = require('request-promise');
return rp({
url: Url,
method: "POST",
headers: {
"content-type": "application/x-www-form-urlencoded",
},
body: "Data=%3CSearchRequest%3E%0A%20%20%20%20%3CLoginDetails%3E%0A%20%20%20%20%20%20%20%20%3CLogin%3Etour%20booking%3C%2FLogin%3E%0A%20%20%20%20%20%20%20%20%3CPassword%3Exmltest%3C%2FPassword%3E%0A%20%20%20%20%3C%2FLoginDetails%3E%0A%20%20%20%20%3CSearchDetails%3E%0A%20%20%20%20%20%20%20%20%3CArrivalDate%3E2017-08-17%3C%2FArrivalDate%3E%0A%20%20%20%20%20%20%20%20%3CDuration%3E1%3C%2FDuration%3E%0A%20%20%20%20%20%20%20%20%3CRegionID%3E616%3C%2FRegionID%3E%0A%20%20%20%20%20%20%20%20%3CMealBasisID%3E0%3C%2FMealBasisID%3E%0A%20%20%20%20%20%20%20%20%3CMinStarRating%3E0%3C%2FMinStarRating%3E%0A%20%20%20%20%20%20%20%20%3CRoomRequests%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3CRoomRequest%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CAdults%3E2%3C%2FAdults%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CChildren%3E2%3C%2FChildren%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CInfants%3E0%3C%2FInfants%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CChildAges%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CChildAge%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CAge%3E8%3C%2FAge%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2FChildAge%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CChildAge%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CAge%3E8%3C%2FAge%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2FChildAge%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2FChildAges%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2FRoomRequest%3E%0A%20%20%20%20%20%20%20%20%3C%2FRoomRequests%3E%0A%20%20%20%20%20%20%20%20%3CRoomRequests%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3CRoomRequest%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CAdults%3E1%3C%2FAdults%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CChildren%3E0%3C%2FChildren%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CInfants%3E0%3C%2FInfants%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2FRoomRequest%3E%0A%20%20%20%20%20%20%20%20%3C%2FRoomRequests%3E%0A%20%20%20%20%3C%2FSearchDetails%3E%0A%3C%2FSearchRequest%3E",
form: false,
}).then(function (body) {
console.log(body);
});
and here is my postman code:
POST /xml/book.aspx HTTP/1.1 Host: asmsajib.me Content-Type: application/x-www-form-urlencoded Cache-Control: no-cache Postman-Token: 9b9e6ea7-f7cb-f2a2-3fd7-5222cd9e0654 Data=%3CSearchRequest%3E%0A%20%20%20%20%3CLoginDetails%3E%0A%20%20%20%20%20%20%20%20%3CLogin%3Etour%20booking%3C%2FLogin%3E%0A%20%20%20%20%20%20%20%20%3CPassword%3Exmltest%3C%2FPassword%3E%0A%20%20%20%20%3C%2FLoginDetails%3E%0A%20%20%20%20%3CSearchDetails%3E%0A%20%20%20%20%20%20%20%20%3CArrivalDate%3E2017-08-17%3C%2FArrivalDate%3E%0A%20%20%20%20%20%20%20%20%3CDuration%3E1%3C%2FDuration%3E%0A%20%20%20%20%20%20%20%20%3CRegionID%3E616%3C%2FRegionID%3E%0A%20%20%20%20%20%20%20%20%3CMealBasisID%3E0%3C%2FMealBasisID%3E%0A%20%20%20%20%20%20%20%20%3CMinStarRating%3E0%3C%2FMinStarRating%3E%0A%20%20%20%20%20%20%20%20%3CRoomRequests%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3CRoomRequest%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CAdults%3E2%3C%2FAdults%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CChildren%3E2%3C%2FChildren%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CInfants%3E0%3C%2FInfants%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CChildAges%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CChildAge%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CAge%3E8%3C%2FAge%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2FChildAge%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CChildAge%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CAge%3E8%3C%2FAge%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2FChildAge%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2FChildAges%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2FRoomRequest%3E%0A%20%20%20%20%20%20%20%20%3C%2FRoomRequests%3E%0A%20%20%20%20%20%20%20%20%3CRoomRequests%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3CRoomRequest%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CAdults%3E1%3C%2FAdults%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CChildren%3E0%3C%2FChildren%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3CInfants%3E0%3C%2FInfants%3E%0A%20%20%20%20%20%20%20%20%20%20%20%20%3C%2FRoomRequest%3E%0A%20%20%20%20%20%20%20%20%3C%2FRoomRequests%3E%0A%20%20%20%20%3C%2FSearchDetails%3E%0A%3C%2FSearchRequest%3E
You need to set Content-Length for the raw post to work and also I changed your headers to init caps.
rp({
url: Url,
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
"Content-Length": Buffer.byteLength(data) // your data
},
form: false
}).then(function (body) {
console.log(body);
}).catch((err) => {
console.log(err);
});

How to retrieve PayPal REST Api access-token using node

How to get the PayPal access-token needed to leverage the REST Api by using node?
Once you have a PayPal client Id and a Client Secret you can use the following:
var request = require('request');
request.post({
uri: "https://api.sandbox.paypal.com/v1/oauth2/token",
headers: {
"Accept": "application/json",
"Accept-Language": "en_US",
"content-type": "application/x-www-form-urlencoded"
},
auth: {
'user': '---your cliend ID---',
'pass': '---your client secret---',
// 'sendImmediately': false
},
form: {
"grant_type": "client_credentials"
}
}, function(error, response, body) {
console.log(body);
});
The response, if successful, will be something as the following:
{
"scope":"https://api.paypal.com/v1/payments/.* ---and more URL callable with the access-token---",
"access_token":"---your access-token---",
"token_type":"Bearer",
"app_id":"APP-1234567890",
"expires_in":28800
}
Also, you can use axios, and async/await:
const axios = require('axios');
(async () => {
try {
const { data: { access_token } } = await axios({
url: 'https://api.sandbox.paypal.com/v1/oauth2/token',
method: 'post',
headers: {
Accept: 'application/json',
'Accept-Language': 'en_US',
'content-type': 'application/x-www-form-urlencoded',
},
auth: {
username: client_id,
password: client_secret,
},
params: {
grant_type: 'client_credentials',
},
});
console.log('access_token: ', access_token);
} catch (e) {
console.error(e);
}
})();
Modern problems require modern solutions:
const fetch = require('node-fetch');
const authUrl = "https://api-m.sandbox.paypal.com/v1/oauth2/token";
const clientIdAndSecret = "CLIENT_ID:SECRET_CODE";
const base64 = Buffer.from(clientIdAndSecret).toString('base64')
fetch(authUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Accept-Language': 'en_US',
'Authorization': `Basic ${base64}`,
},
body: 'grant_type=client_credentials'
}).then(function(response) {
return response.json();
}).then(function(data) {
console.log(data.access_token);
}).catch(function() {
console.log("couldn't get auth token");
});
You could use PayPal-Node-SDK to make calls to PayPal Rest APIs. It handles all the authorization and authentication for you.
Here is how I get the access_token using superagent
superagent.post('https://api.sandbox.paypal.com/v1/oauth2/token')
.set("Accept","application/json")
.set("Accept-Language","en_US")
.set("content-type","application/x-www-form-urlencoded")
.auth("Your Client Id","Your Secret")
.send({"grant_type": "client_credentials"})
.then((res) => console.log("response",res.body))

Resources