我有以下应用程序,应该使用twitter进行授权,并且我使用的是Firestore。我使用的是nodejs,我遇到的问题是当我在onRequest中使用onRequest时,它应该返回一个响应并将值设置到一个消防站数据库。下面是我的代码
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();
const dbRef = admin.firestore().doc("tokens/demo");
const TwitterApi = require("twitter-api-v2").default;
const twitterClient = new TwitterApi({
clientId: "",
clientSecret: "",
});
const callBackUrl = "http://127.0.0.1:5000/lucembot/us-central1/callback";
exports.auth = functions.https.onRequest((request, response) => {
const {url, codeVerifier, state} = twitterClient.generateOAuth2AuthLink(callBackUrl, {
scope: ["tweet.read", "tweet.write", "users.read", "offline.access"],
});
await dbRef.set({codeVerifier, state});
response.redirect(url);
});
exports.callback = functions.https.onRequest((request, response) => {});
exports.tweet = functions.https.onRequest((request, response) => {});我的错误越来越少
await dbRef.set({codeVerifier, state});
^^^^^
SyntaxError: await is only valid in async functions and the top level bodies of modules
at Object.compileFunction (node:vm:352:18)
at wrapSafe (node:internal/modules/cjs/loader:1026:15)
at Module._compile (node:internal/modules/cjs/loader:1061:27)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1151:10)
at Module.load (node:internal/modules/cjs/loader:975:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:77:12)
at node:internal/main/run_main_module:17:47
Node.js v17.6.0发布于 2022-03-02 12:13:06
顶级等待意味着您试图在异步函数之外使用异步/等待语法。您可以在异步函数下运行等待语句。
所以,你必须写你的:
functions.https.onRequest( (request, response) => {
as
functions.https.onRequest( async (request, response) => { 想了解更多细节。检查这里。
发布于 2022-03-01 07:32:40
通常等待的是返回承诺的函数,而不是返回请求对象并期望您使用回调或事件侦听器知道何时完成任务的函数。通常,我会建议你使用请求-承诺模块。
但是,由于请求承诺已被否决,以下是不依赖于NPM请求包的其他选项。got已经被提到了,但它取决于其他11个软件包。
相反,axios只有一个依赖项(用于重定向)。其他一切都是本机实现的,并构建在本机NodeJS包之上。
下面是一个使用axios的示例:
const axios = require('axios')
const response = await axios.get(callbackUrl)
const result = response.data或者,作为JavaScript中的一条直线
const result = (await axios.get(callbackUrl)).datahttps://stackoverflow.com/questions/71304921
复制相似问题