Meer informatie over de map Handelingen actions-folder
De map actions
voor deze voorbeeldapp bevat enkele JavaScript-bestanden en één map met de naam commerce
. De getoonde JavaScript is een uitstekend voorbeeldbestand dat opnieuw kan worden gebruikt als het relevant is voor uw werk. Deze map kan u tijd besparen bij de ontwikkeling wanneer u verbinding maakt met de Adobe Commerce-toepassing met OAuth en REST.
De daadwerkelijke namen van mappen in dit voorbeeld zijn willekeurig, maar als u de namen van de mappen kent, kunt u de voorbeeldcode beter interpreteren. Door een zinvolle naamgevingsconventie te gebruiken, kunt u verwarring voorkomen als de toepassing complexer wordt.
Voor wie is deze video?
- Nieuwe Adobe Commerce-ontwikkelaars met beperkte ervaring met Adobe App Builder die meer leren over de map actions in de voorbeeldtoepassing.
Video-inhoud
- Inleiding tot App Builder en de voorbeeldmodule met focus op de map
actions
- De map "actions" gebruiken
- Het doel van het JavaScript-bestand in de mappen
actions
encommerce
. - Een kort overzicht van de OAuth-verificatiebestanden
Codevoorbeelden
actions/oauth1a.js
/*
* Copyright 2023 Adobe
* All Rights Reserved.
*
* NOTICE: All information contained herein is, and remains
* the property of Adobe and its suppliers, if any. The intellectual
* and technical concepts contained herein are proprietary to Adobe
* and its suppliers and are protected by all applicable intellectual
* property laws, including trade secret and copyright laws.
* Dissemination of this information or reproduction of this material
* is strictly forbidden unless prior written permission is obtained
* from Adobe.
*/
const { Core } = require('@adobe/aio-sdk')
const { errorResponse, checkMissingRequestInputs} = require('../utils')
const { getCommerceOauthClient } = require('../oauth1a')
async function main(params) {
const logger = Core.Logger('main', { level: params.LOG_LEVEL || 'info' })
try {
const requiredParams = ['operation', 'COMMERCE_BASE_URL']
const requiredHeaders = ['Authorization']
const errorMessage = checkMissingRequestInputs(params, requiredParams, requiredHeaders)
if (errorMessage) {
// return and log client errors
return errorResponse(400, errorMessage, logger)
}
const { operation } = params
const oauth = getCommerceOauthClient(
{
url: params.COMMERCE_BASE_URL,
consumerKey: params.COMMERCE_CONSUMER_KEY,
consumerSecret: params.COMMERCE_CONSUMER_SECRET,
accessToken: params.COMMERCE_ACCESS_TOKEN,
accessTokenSecret: params.COMMERCE_ACCESS_TOKEN_SECRET
},
logger
)
const content = await oauth.get(operation)
return {
statusCode: 200,
body: content
}
} catch (error) {
// log any server errors
logger.error(error)
// return with 500
return errorResponse(500, error, logger)
}
}
exports.main = main
actions/utils.js
/*
* Copyright 2023 Adobe
* All Rights Reserved.
*
* NOTICE: All information contained herein is, and remains
* the property of Adobe and its suppliers, if any. The intellectual
* and technical concepts contained herein are proprietary to Adobe
* and its suppliers and are protected by all applicable intellectual
* property laws, including trade secret and copyright laws.
* Dissemination of this information or reproduction of this material
* is strictly forbidden unless prior written permission is obtained
* from Adobe.
*/
/* This file exposes some common utilities for your actions */
/**
*
* Returns a log ready string of the action input parameters.
* The `Authorization` header content will be replaced by '<hidden>'.
*
* @param {object} params action input parameters.
*
* @returns {string}
*
*/
function stringParameters (params) {
// hide authorization token without overriding params
let headers = params.__ow_headers || {}
if (headers.authorization) {
headers = { ...headers, authorization: '<hidden>' }
}
return JSON.stringify({ ...params, __ow_headers: headers })
}
/**
*
* Returns the list of missing keys giving an object and its required keys.
* A parameter is missing if its value is undefined or ''.
* A value of 0 or null is not considered as missing.
*
* @param {object} obj object to check.
* @param {array} required list of required keys.
* Each element can be multi level deep using a '.' separator e.g. 'myRequiredObj.myRequiredKey'
*
* @returns {array}
* @private
*/
function getMissingKeys (obj, required) {
return required.filter(r => {
const splits = r.split('.')
const last = splits[splits.length - 1]
const traverse = splits.slice(0, -1).reduce((tObj, split) => { tObj = (tObj[split] || {}); return tObj }, obj)
return traverse[last] === undefined || traverse[last] === '' // missing default params are empty string
})
}
/**
*
* Returns the list of missing keys giving an object and its required keys.
* A parameter is missing if its value is undefined or ''.
* A value of 0 or null is not considered as missing.
*
* @param {object} params action input parameters.
* @param {array} requiredHeaders list of required input headers.
* @param {array} requiredParams list of required input parameters.
* Each element can be multi level deep using a '.' separator e.g. 'myRequiredObj.myRequiredKey'.
*
* @returns {string} if the return value is not null, then it holds an error message describing the missing inputs.
*
*/
function checkMissingRequestInputs (params, requiredParams = [], requiredHeaders = []) {
let errorMessage = null
// input headers are always lowercase
requiredHeaders = requiredHeaders.map(h => h.toLowerCase())
// check for missing headers
const missingHeaders = getMissingKeys(params.__ow_headers || {}, requiredHeaders)
if (missingHeaders.length > 0) {
errorMessage = `missing header(s) '${missingHeaders}'`
}
// check for missing parameters
const missingParams = getMissingKeys(params, requiredParams)
if (missingParams.length > 0) {
if (errorMessage) {
errorMessage += ' and '
} else {
errorMessage = ''
}
errorMessage += `missing parameter(s) '${missingParams}'`
}
return errorMessage
}
/**
*
* Extracts the bearer token string from the Authorization header in the request parameters.
*
* @param {object} params action input parameters.
*
* @returns {string|undefined} the token string or undefined if not set in request headers.
*
*/
function getBearerToken (params) {
if (params.__ow_headers &&
params.__ow_headers.authorization &&
params.__ow_headers.authorization.startsWith('Bearer ')) {
return params.__ow_headers.authorization.substring('Bearer '.length)
}
return undefined
}
/**
*
* Returns an error response object and attempts to log.info the status code and error message
*
* @param {number} statusCode the error status code.
* e.g. 400
* @param {string} message the error message.
* e.g. 'missing xyz parameter'
* @param {*} [logger] an optional logger instance object with an `info` method
* e.g. `new require('@adobe/aio-sdk').Core.Logger('name')`
*
* @returns {object} the error object, ready to be returned from the action main's function.
*
*/
function errorResponse (statusCode, message, logger) {
if (logger && typeof logger.info === 'function') {
logger.info(`${statusCode}: ${message}`)
}
return {
error: {
statusCode,
body: {
error: message
}
}
}
}
module.exports = {
errorResponse,
getBearerToken,
stringParameters,
checkMissingRequestInputs
}
actions/commerce/index.js
/*
* Copyright 2023 Adobe
* All Rights Reserved.
*
* NOTICE: All information contained herein is, and remains
* the property of Adobe and its suppliers, if any. The intellectual
* and technical concepts contained herein are proprietary to Adobe
* and its suppliers and are protected by all applicable intellectual
* property laws, including trade secret and copyright laws.
* Dissemination of this information or reproduction of this material
* is strictly forbidden unless prior written permission is obtained
* from Adobe.
*/
const { Core } = require('@adobe/aio-sdk')
const { errorResponse, checkMissingRequestInputs} = require('../utils')
const { getCommerceOauthClient } = require('../oauth1a')
async function main(params) {
const logger = Core.Logger('main', { level: params.LOG_LEVEL || 'info' })
try {
const requiredParams = ['operation', 'COMMERCE_BASE_URL']
const requiredHeaders = ['Authorization']
const errorMessage = checkMissingRequestInputs(params, requiredParams, requiredHeaders)
if (errorMessage) {
// return and log client errors
return errorResponse(400, errorMessage, logger)
}
const { operation } = params
const oauth = getCommerceOauthClient(
{
url: params.COMMERCE_BASE_URL,
consumerKey: params.COMMERCE_CONSUMER_KEY,
consumerSecret: params.COMMERCE_CONSUMER_SECRET,
accessToken: params.COMMERCE_ACCESS_TOKEN,
accessTokenSecret: params.COMMERCE_ACCESS_TOKEN_SECRET
},
logger
)
const content = await oauth.get(operation)
return {
statusCode: 200,
body: content
}
} catch (error) {
// log any server errors
logger.error(error)
// return with 500
return errorResponse(500, error, logger)
}
}
exports.main = main
App Builder - Uw eerste App-gerelateerde pagina's maken
recommendation-more-help
3a5f7e19-f383-4af8-8983-d01154c1402f