Firebase Cloud Functions Express app return statement
I'm currently building a Firebase Cloud function which uses the Spotify API.
Now I know this code works since I've also used it before I created an Express app off of this.
But since then I cannot seem to get my cloud function to return anything...
I really don't get what I'm doing wrong.
const app = express();
app.use(cors({ origin: true }));
app.get("/", (req, res) => res.send("No track specified"));
app.get("/:track", (req, res) => res.send(getTrack(req.params.track)));
function getTrack(track) {
// Set up Auth options
console.log(track);
const spotify_auth_options = {
url: "https://accounts.spotify.com/api/token",
headers: {
Authorization:
"Basic " +
new Buffer(spotify_client_id + ":" + spotify_client_secret).toString(
"base64"
)
},
form: {
grant_type: "client_credentials"
},
json: true
};
request.post(spotify_auth_options, function(error, response, body) {
if (!error && response.statusCode === 200) {
console.log("No error");
// use the access token to access the Spotify Web API
var token = body.access_token;
var options = {
url: "https://api.spotify.com/v1/search?q=" + track,
headers: {
Authorization: "Bearer " + token
},
json: true
};
request.get(options, function(error, response, body) {
console.log(body.tracks);
return body.tracks;
});
}
});
}
exports.searchTrack = functions.https.onRequest(app);
firebase google-cloud-functions
add a comment |
I'm currently building a Firebase Cloud function which uses the Spotify API.
Now I know this code works since I've also used it before I created an Express app off of this.
But since then I cannot seem to get my cloud function to return anything...
I really don't get what I'm doing wrong.
const app = express();
app.use(cors({ origin: true }));
app.get("/", (req, res) => res.send("No track specified"));
app.get("/:track", (req, res) => res.send(getTrack(req.params.track)));
function getTrack(track) {
// Set up Auth options
console.log(track);
const spotify_auth_options = {
url: "https://accounts.spotify.com/api/token",
headers: {
Authorization:
"Basic " +
new Buffer(spotify_client_id + ":" + spotify_client_secret).toString(
"base64"
)
},
form: {
grant_type: "client_credentials"
},
json: true
};
request.post(spotify_auth_options, function(error, response, body) {
if (!error && response.statusCode === 200) {
console.log("No error");
// use the access token to access the Spotify Web API
var token = body.access_token;
var options = {
url: "https://api.spotify.com/v1/search?q=" + track,
headers: {
Authorization: "Bearer " + token
},
json: true
};
request.get(options, function(error, response, body) {
console.log(body.tracks);
return body.tracks;
});
}
});
}
exports.searchTrack = functions.https.onRequest(app);
firebase google-cloud-functions
You're trying to use thereturn
keyword deeply nested in two callbacks to return data out of a top level function that is effectively asynchronous. This is definitely not going to work. Consider using promises more effectively, or pass the Response object into the function that generates the final response, and invoke it from there.
– Doug Stevenson
Nov 19 '18 at 15:48
Doug, that looks like the solution. Do you mind putting it as an answer so others can upvote it?
– Ying Li
Nov 21 '18 at 20:31
add a comment |
I'm currently building a Firebase Cloud function which uses the Spotify API.
Now I know this code works since I've also used it before I created an Express app off of this.
But since then I cannot seem to get my cloud function to return anything...
I really don't get what I'm doing wrong.
const app = express();
app.use(cors({ origin: true }));
app.get("/", (req, res) => res.send("No track specified"));
app.get("/:track", (req, res) => res.send(getTrack(req.params.track)));
function getTrack(track) {
// Set up Auth options
console.log(track);
const spotify_auth_options = {
url: "https://accounts.spotify.com/api/token",
headers: {
Authorization:
"Basic " +
new Buffer(spotify_client_id + ":" + spotify_client_secret).toString(
"base64"
)
},
form: {
grant_type: "client_credentials"
},
json: true
};
request.post(spotify_auth_options, function(error, response, body) {
if (!error && response.statusCode === 200) {
console.log("No error");
// use the access token to access the Spotify Web API
var token = body.access_token;
var options = {
url: "https://api.spotify.com/v1/search?q=" + track,
headers: {
Authorization: "Bearer " + token
},
json: true
};
request.get(options, function(error, response, body) {
console.log(body.tracks);
return body.tracks;
});
}
});
}
exports.searchTrack = functions.https.onRequest(app);
firebase google-cloud-functions
I'm currently building a Firebase Cloud function which uses the Spotify API.
Now I know this code works since I've also used it before I created an Express app off of this.
But since then I cannot seem to get my cloud function to return anything...
I really don't get what I'm doing wrong.
const app = express();
app.use(cors({ origin: true }));
app.get("/", (req, res) => res.send("No track specified"));
app.get("/:track", (req, res) => res.send(getTrack(req.params.track)));
function getTrack(track) {
// Set up Auth options
console.log(track);
const spotify_auth_options = {
url: "https://accounts.spotify.com/api/token",
headers: {
Authorization:
"Basic " +
new Buffer(spotify_client_id + ":" + spotify_client_secret).toString(
"base64"
)
},
form: {
grant_type: "client_credentials"
},
json: true
};
request.post(spotify_auth_options, function(error, response, body) {
if (!error && response.statusCode === 200) {
console.log("No error");
// use the access token to access the Spotify Web API
var token = body.access_token;
var options = {
url: "https://api.spotify.com/v1/search?q=" + track,
headers: {
Authorization: "Bearer " + token
},
json: true
};
request.get(options, function(error, response, body) {
console.log(body.tracks);
return body.tracks;
});
}
});
}
exports.searchTrack = functions.https.onRequest(app);
firebase google-cloud-functions
firebase google-cloud-functions
asked Nov 19 '18 at 15:43
Rick - HashtagNetworkRick - HashtagNetwork
416
416
You're trying to use thereturn
keyword deeply nested in two callbacks to return data out of a top level function that is effectively asynchronous. This is definitely not going to work. Consider using promises more effectively, or pass the Response object into the function that generates the final response, and invoke it from there.
– Doug Stevenson
Nov 19 '18 at 15:48
Doug, that looks like the solution. Do you mind putting it as an answer so others can upvote it?
– Ying Li
Nov 21 '18 at 20:31
add a comment |
You're trying to use thereturn
keyword deeply nested in two callbacks to return data out of a top level function that is effectively asynchronous. This is definitely not going to work. Consider using promises more effectively, or pass the Response object into the function that generates the final response, and invoke it from there.
– Doug Stevenson
Nov 19 '18 at 15:48
Doug, that looks like the solution. Do you mind putting it as an answer so others can upvote it?
– Ying Li
Nov 21 '18 at 20:31
You're trying to use the
return
keyword deeply nested in two callbacks to return data out of a top level function that is effectively asynchronous. This is definitely not going to work. Consider using promises more effectively, or pass the Response object into the function that generates the final response, and invoke it from there.– Doug Stevenson
Nov 19 '18 at 15:48
You're trying to use the
return
keyword deeply nested in two callbacks to return data out of a top level function that is effectively asynchronous. This is definitely not going to work. Consider using promises more effectively, or pass the Response object into the function that generates the final response, and invoke it from there.– Doug Stevenson
Nov 19 '18 at 15:48
Doug, that looks like the solution. Do you mind putting it as an answer so others can upvote it?
– Ying Li
Nov 21 '18 at 20:31
Doug, that looks like the solution. Do you mind putting it as an answer so others can upvote it?
– Ying Li
Nov 21 '18 at 20:31
add a comment |
1 Answer
1
active
oldest
votes
As mentioned by Doug in the comments section of this question, it seems your return statement is not in the appropriate section. It’s nested deep inside two callbacks which returns data of the top level function. If you would like this code to work and return the variables you are asking it to, please consider moving this return statement into the function that is generating the final response in your code.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53378134%2ffirebase-cloud-functions-express-app-return-statement%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
As mentioned by Doug in the comments section of this question, it seems your return statement is not in the appropriate section. It’s nested deep inside two callbacks which returns data of the top level function. If you would like this code to work and return the variables you are asking it to, please consider moving this return statement into the function that is generating the final response in your code.
add a comment |
As mentioned by Doug in the comments section of this question, it seems your return statement is not in the appropriate section. It’s nested deep inside two callbacks which returns data of the top level function. If you would like this code to work and return the variables you are asking it to, please consider moving this return statement into the function that is generating the final response in your code.
add a comment |
As mentioned by Doug in the comments section of this question, it seems your return statement is not in the appropriate section. It’s nested deep inside two callbacks which returns data of the top level function. If you would like this code to work and return the variables you are asking it to, please consider moving this return statement into the function that is generating the final response in your code.
As mentioned by Doug in the comments section of this question, it seems your return statement is not in the appropriate section. It’s nested deep inside two callbacks which returns data of the top level function. If you would like this code to work and return the variables you are asking it to, please consider moving this return statement into the function that is generating the final response in your code.
answered Nov 26 '18 at 16:55
community wiki
Harmit Rishi
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53378134%2ffirebase-cloud-functions-express-app-return-statement%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
You're trying to use the
return
keyword deeply nested in two callbacks to return data out of a top level function that is effectively asynchronous. This is definitely not going to work. Consider using promises more effectively, or pass the Response object into the function that generates the final response, and invoke it from there.– Doug Stevenson
Nov 19 '18 at 15:48
Doug, that looks like the solution. Do you mind putting it as an answer so others can upvote it?
– Ying Li
Nov 21 '18 at 20:31