我试图使用HTTPS请求中的JSON数据来填充基于请求的参数,但我一直遇到相同的错误:
> index.js:45
> value: request.body.header.value
> ^
>
> TypeError: Cannot read properties of undefined (reading 'value')
我似乎没有问题,访问第一层的项目,但我不能绕过上述错误的任何过去的第一级。以下是我的脚本到目前为止的样子:
const functions = require("firebase-functions");
const { PKPass } = require("passkit-generator");
const admin = require("firebase-admin");
var fs = require("file-system");
var path = require("path");
var axios = require("axios");
admin.initializeApp(functions.config().firebase);
var storageRef = admin.storage().bucket()
function hexToRgb(hex) {
var bigint = parseInt(hex, 16);
var r = (bigint >> 16) & 255;
var g = (bigint >> 8) & 255;
var b = bigint & 255;
return "rgb(" + r + ", " + g + ", " + b + ")";
}
exports.pass = functions.https.onRequest((request, response) => {
PKPass.from({
model: "./model/BoardingPass.pass",
certificates: {
wwdr: fs.fs.readFileSync("./certs/wwdr.pem"),
signerCert: fs.fs.readFileSync("./certs/passIdentifierSignerCert.pem"),
signerKey: fs.fs.readFileSync("./certs/passIdentifierSignerKey.pem"),
signerKeyPassphrase: "PASSPHRASE"
},
},
{
authenticationToken: "AUTHTOKEN",
webServiceURL: "WEBSERVICEURL",
serialNumber: request.body.serialNumber,
description: request.body.description,
logoText: request.body.logoText,
foregroundColor: hexToRgb("#" + request.body.foregroundColour),
backgroundColor: hexToRgb("#" + request.body.backgroundColour)
})
.then(async (newPass) => {
newPass.headerFields.push(
{
key: "gate",
label: "GATE",
value: request.body.header.value
}
)
newPass.primaryFields.push(
{
key: "depart",
label: request.body.primary[0].label,
value: request.body.primary[0].value
},
{
key: "arrive",
label: request.body.primary[1].label,
value: request.body.primary[1].value
}
)
newPass.secondaryFields.push(
{
key: "passenger",
label: "PASSENGER",
value: request.body.secondary.value
}
)
newPass.auxiliaryFields.push(
{
key: "boardingTime",
label: "DEPART",
value: request.body.auxiliary[0].value
},
{
key: "flightNewName",
label: "FLIGHT",
value: request.body.auxiliary[1].value
},
{
key: "class",
label: "CLASS",
value: request.body.auxiliary[2].value
},
{
key: "date",
label: "DATE",
value: request.body.auxiliary[3].value
}
)
newPass.backFields.push(
{
key: "passport",
label: "PASSPORT",
value: request.bodyback[0].value
},
{
key: "residence",
label: "RESIDENCE",
value: request.body.back[1].value
}
)
newPass.setBarcodes({
message: request.body.barcode,
format: "PKBarcodeFormatPDF417",
messageEncoding: "iso-8859-1"
})
const resp = await axios.get(request.body.thumbnail, { responseType: 'arraybuffer' })
const buffer = Buffer.from(resp.data, "utf-8")
newPass.addBuffer("thumbnail.png", buffer)
newPass.addBuffer("thumbnail@2x.png", buffer)
const bufferData = newPass.getAsBuffer();
fs.writeFileSync("new.pkpass", bufferData)
storageRef.file("passes/boardingPass.pkpass")
.save(bufferData, (error) => {
if (!error) {
console.log("Pass was uploaded successfully.");
response.status(200);
}
else {
console.log("There was an error uploading pass");
response.status(400);
}
})
})
});
下面是HTTPS POST请求:
{
"barcode": "TESTBARCODE",
"thumbnail": "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png",
"serialNumber": "TESTSERIAL",
"description": "TESTDESCRIPTION",
"logoText": "TESTLOGOTEXT",
"foregroundColour": "#FFFFFF",
"backgroundColour": "#000000",
"header": [{
"value": "21"
}],
"primary": [
{
"label": "Melbourne",
"value": "MEL"
},
{
"label": "Singapore",
"value": "SNG"
}
],
"secondary": {
"value": "TEST PASSENGER NAME"
},
"auxiliary": [
{
"value": "11:59 PM"
},
{
"value": "999"
},
{
"value": "Economy"
},
{
"value": "1/12"
}
],
"back": [
{
"value": "COUNTRY"
},
{
"value": "1 Flinders Street, Melbourne, Victoria, 3000"
}
]
}
无论response.body.*.<HERE>
后面是什么,都会发生相同的错误。
1条答案
按热度按时间oaxa6hgo1#
request.body.header
看起来像一个数组,而不是一个对象>所以也许你需要索引数组来找到
value
: