我開始研究 IBM Cloud Functions(NodeJS 運行時),想知道是否有人能夠在他的本地機器上除錯一個函式。
假設有一個簡單的 NodeJs 函式,它回傳一個 json。
const md5 = require('spark-md5');
function myAction(params) {
// params contain the "rows" coming from Cloudant including the full documents
return {
entries: params.rows.map((row) => { return {
name: row.doc.name,
email: row.doc.email,
comment: row.doc.comment,
createdAt: row.doc.createdAt,
icon: (row.doc.email ? `https://secure.gravatar.com/avatar/${md5.hash(row.doc.email.trim().toLowerCase())}?s=64` : null)
}})
};
}
exports.main = myAction;
我想要斷點和分步除錯。在 IBM Cloud Functions 上部署此函式之前,如何除錯它?我什至不知道如何傳遞輸入和查看輸出。我習慣使用 Postman 來測驗我的后端,但在這里我有點困惑,不知道從哪里開始。
uj5u.com熱心網友回復:
我通常解決此類問題的方法是分解我的代碼并以一種我可以將其“插入”到我知道如何運行和除錯的方式匯出它。您實際上已經在如何組織代碼方面做到了這一點。你的云函式是一個函式,它接受一個params引數,回傳一個物件,你用exports.main = myAction;.
為了在本地測驗它,包括在除錯器中運行它,我將創建一個入口點檔案來匯入操作并呼叫它。我可以在不啟用除錯器的情況下運行該檔案,依靠它console.log來幫助我除錯(我會在部署到生產之前將其洗掉),或者我可以使用除錯器運行它。
// main.js
const action = require('./action').main;
const actionResult = action({
rows: [
{
doc: {
name: 'Jane',
email: '[email protected]',
comment: 'Lovely day, isn\'t it?',
createdAt: new Date(),
},
},
],
});
console.log('Result:', result);
要在 VS Code 中使用除錯器運行它,當我打開檔案并獲得焦點時,我會單擊“運行和除錯”:

我會選擇“Node.js”:

隨著除錯器的運行,我設定的任何斷點,特別是操作檔案中的一個,都會被命中:

我可以在操作執行時查看狀態:

如果我想進行更高級的測驗,以更接近于將我的操作部署為 Web 操作的方式,我會設定一個 Express.js 應用程式并制作使用該操作作為 Express.js 中間件的配接器。因為 JS 動作的簽名與作為中間件的 Express.js 不兼容,我必須撰寫一個配接器:
const express = require('express');
const action = require('./action').main;
const app = express();
app.use(express.json());
app.post('/', function (req, res) {
const actionInput = req.body; // JSON request results in object here
const actionResult = action(actionInput);
res.json(actionResult);
});
app.listen(3000);

就像上面一樣,在 VS Code 中,我可以使用斷點來除錯它并檢查狀態。請注意我的 Insomnia 螢屏截圖中請求正文中使用的 ISO8601 字串:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/370490.html
標籤:调试 ibm-cloud 打开威士忌 ibm-cloud-functions
