node.js - 在 Azure 函数中返回正文
问题描述
我需要一点帮助。我正在创建一个 Azure 函数来使用 NodeJS 生成令牌。下面是我创建的函数。
const { response } = require('request');
module.exports = async function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
var request = require('request');
var options = {
'method': 'POST',
'url': 'https://abc.onbmc.com/api/jwt/login',
'headers': {
'Content-Type': 'application/x-www-form-urlencoded',
'Connection': 'keep-alive'
},
form: {
'username': 'abc@xyz.com',
'password': 'password123'
}
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
context.res = {
//status: 200, /* Defaults to 200 */
body: response.body
};
}
)
}
我能够通过显示所需的输出,console.log
但无法在响应正文中显示它。响应正文仅显示请求的 HTTP 已成功完成。
HTTP/1.1 200 OK
Connection: close
Date: Tue, 14 Sep 2021 16:32:39 GMT
Content-Type: text/plain; charset=utf-8
Server: Kestrel
Content-Length: 0
任何帮助表示赞赏。
解决方案
您不是在等待回复。
当您收到来自“https://abc.onbmc.com/api/jwt/login”的响应时,该函数已经将数据返回给消费者 - 因此 200 OK,即使您在回调中收到错误也是如此. 函数实例在返回响应后继续工作,因此它成功登录回调,但是您将 body 属性分配给已经返回的对象。
为了解决此问题(假设您仍想使用 request 模块),您可以使用 util 模块来承诺它,如下所示:
const util = require('util')
const { response } = require('request');
const requestPromise = util.promisify(request);
module.exports = async function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
var request = require('request');
var options = {
'method': 'POST',
'url': 'https://abc.onbmc.com/api/jwt/login',
'headers': {
'Content-Type': 'application/x-www-form-urlencoded',
'Connection': 'keep-alive'
},
form: {
'username': 'abc@xyz.com',
'password': 'password123'
}
};
try {
const response = await requestPromise(options);
console.log(response.body);
context.res = {
//status: 200, /* Defaults to 200 */
body: response.body
};
} catch (error) {
// Handle your error here
throw new Error(error);
}
}
这样,您正在等待来自所需 URL 的响应。
值得一提:这是直接从 Microsoft 文档处理此类情况的推荐方法:https ://docs.microsoft.com/en-us/azure/azure-functions/functions-reference-node?tabs=v2#use-异步等待
推荐阅读
- python - 如何在pygame中添加检测碰撞
- amazon-web-services - Is creating an Organization disruptive to an existing production environment
- c++ - 我如何将枚举更改为字符?我正在尝试投射它,但它给了我一个错误
- java - 具有多个升序值列表的数值排序
- r - R删除数据框中的公共列
- python - AttributeError:“索引”对象没有属性“天”Python
- javascript - 我将如何“刷新”嵌入 discord.js 的不和谐?更多信息下来 vv
- linux - 将大量页面的office文档拆分为多个文件
- kotlin - Twitter4j 在模拟器上运行良好,但发布后崩溃(ClassNotFoundException)
- auc - 如何确定寻找 ROC 的 AUC 的最佳阈值区间值?