我用的是努克斯特。我正在尝试使用Zoom的API,它坚持让我做服务器端调用。所以我做了一个serverMiddleware,看起来是这样的:
require('dotenv').config
const https = require('https')
const querystring = require('querystring')
export default function(req, res){
if (req.method === 'GET'){
const url = new URL(req.url, `http://${req.headers.host}`)
let host = 'zoom.us'
let tail = '/oauth/token?'
let query = querystring.stringify({
grant_type: 'authorization_code',
code: url.searchParams.get('code'),
redirect_uri: process.env.NUXT_ENV_BASE_URL
})
let data = process.env.NUXT_ENV_ZOOM_CLIENT_ID + ':' + process.env.NUXT_ENV_ZOOM_CLIENT_SECRET
let newData = Buffer.from(data, 'utf8')
let b64string = newData.toString('base64')
function getZoomAccessToken(){
const options = {
hostname: host,
path: tail + query,
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic ' + b64string
}
}
return https.request(options, response => {
let data = ''
response.on('data', (chunk) => {
data += chunk.toString()
})
response.on('end', () => {
console.log(JSON.parse(data));
})
})
.on('error', (error) => {
console.log('An error', error)
})
.end()
}
let body = getZoomAccessToken()
console.log(body)
res.writeHead(200, {
'Content-Type': 'application/json'
})
res.end(body)
}
}如您所见,我在试图从https.request回调中获取数据时遇到了困难。如何确保我能够将响应返回给客户端?
更新:添加更多上下文,body返回请求,而不是任何响应。我认为将https.request函数封装在另一个函数中将有助于捕获响应,但它没有工作。我对Node不熟悉,所以我知道这需要我重写。我只想知道我该怎么重写它。
发布于 2020-12-31 19:36:30
我重写了它,并使用了“节点获取”库,而不是“https”库。这样要优雅得多。
require('dotenv').config()
const fetch = require('node-fetch')
const querystring = require('querystring')
export default function(req, res){
if (req.method === 'GET'){
const url = new URL(req.url, `http://${req.headers.host}`)
let data = process.env.NUXT_ENV_ZOOM_CLIENT_ID + ':' + process.env.NUXT_ENV_ZOOM_CLIENT_SECRET
let newData = Buffer.from(data, 'utf8')
let b64string = newData.toString('base64')
const options = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic ' + b64string
}
}
let zoomUrl = new URL('https://zoom.us/oauth/token')
zoomUrl.searchParams.set('grant_type', 'authorization_code')
zoomUrl.searchParams.set('code', url.searchParams.get('code'))
zoomUrl.searchParams.set('redirect_uri', process.env.NUXT_ENV_BASE_URL)
const getData = async options => {
try {
const response = await fetch(zoomUrl, options)
const json = await response.json()
res.setHeader('Content-Type', 'application/json')
res.end(JSON.stringify(json))
}
catch(e) {
console.log(e)
}
}
getData(options)
}
}我仍然会把这个留给那些还能回答原来问题的人。
https://stackoverflow.com/questions/65514313
复制相似问题