Server-till-server-appen Node.js
- Gäller:
- Experience Manager as a Cloud Service
- Ämnen:
- Innehållsfragment
Skapat för:
- Nybörjare
- Utvecklare
AEM Headless as a Cloud Service
Exempelprogram är ett bra sätt att utforska de headless-funktionerna i Adobe Experience Manager (AEM). Det här server-till-server-programmet visar hur du kan fråga efter innehåll med AEM GraphQL API:er med hjälp av beständiga frågor och skriva ut det på terminalen.
Visa källkoden på GitHub
Förutsättningar
Följande verktyg bör installeras lokalt:
AEM
Programmet Node.js fungerar med följande AEM-distributionsalternativ. Alla distributioner kräver att WKND-platsen v3.0.0+ är installerad.
- AEM as a Cloud Service
- Du kan också ange inloggningsuppgifter om du auktoriserar begäranden (till exempel om du ansluter till AEM Author-tjänsten).
Det här Node.js-programmet kan ansluta till AEM Author eller AEM Publish baserat på kommandoradsparametrarna.
Så här använder du
-
Klona
adobe/aem-guides-wknd-graphql
-databasen:$ git clone git@github.com:adobe/aem-guides-wknd-graphql.git
-
Öppna en terminal och kör kommandona:
$ cd aem-guides-wknd-graphql/server-to-server-app $ npm install
-
Appen kan köras med kommandot:
$ node index.js <AEM_HOST> <OPTIONAL_SERVICE_CONFIG_FILE_PATH>
Om du till exempel vill köra programmet mot AEM Publish utan auktorisering:
$ node index.js https://publish-p123-e789.adobeaemcloud.com
Så här kör du programmet mot AEM Author med behörighet:
$ node index.js https://author-p123-e456.adobeaemcloud.com ./service-config.json
-
En JSON-lista med äventyr från WKND-referensplatsen ska skrivas ut i terminalen.
Koden
Nedan följer en sammanfattning av hur programmet Node.js från server till server har skapats, hur det ansluter till AEM Headless för att hämta innehåll med GraphQL beständiga frågor och hur dessa data presenteras. Den fullständiga koden finns på GitHub.
Det vanligaste användningsområdet för AEM Headless-appar för server-till-server är att synkronisera data för innehållsfragment från AEM till andra system, men det här programmet är avsiktligt enkelt och skriver ut JSON-resultaten från den beständiga frågan.
Beständiga frågor
I enlighet med bästa praxis för AEM Headless använder programmet AEM GraphQL beständiga frågor för att fråga efter äventyrsdata. Programmet använder två beständiga frågor:
wknd/adventures-all
beständig fråga, som returnerar alla äventyr i AEM med en förkortad uppsättning egenskaper. Den här beständiga frågan styr den inledande vyns äventyrslista.
# Retrieves a list of all Adventures
#
# Optional query variables:
# - { "offset": 10 }
# - { "limit": 5 }
# - {
# "imageFormat": "JPG",
# "imageWidth": 1600,
# "imageQuality": 90
# }
query ($offset: Int, $limit: Int, $sort: String, $imageFormat: AssetTransformFormat=JPG, $imageWidth: Int=1200, $imageQuality: Int=80) {
adventureList(
offset: $offset
limit: $limit
sort: $sort
_assetTransform: {
format: $imageFormat
width: $imageWidth
quality: $imageQuality
preferWebp: true
}) {
items {
_path
slug
title
activity
price
tripLength
primaryImage {
... on ImageRef {
_path
_dynamicUrl
}
}
}
}
}
Skapa AEM Headless-klient
const { AEMHeadless, getToken } = require('@adobe/aem-headless-client-nodejs');
async function run() {
// Parse the AEM host, and optional service credentials from the command line arguments
const args = process.argv.slice(2);
const aemHost = args.length > 0 ? args[0] : null; // Example: https://author-p123-e456.adobeaemcloud.com
const serviceCredentialsFile = args.length > 1 ? args[1] : null; // Example: ./service-config.json
// If service credentials are provided via command line argument,
// use `getToken(..)` to exchange them with Adobe IMS for an AEM access token
let accessToken;
if (serviceCredentialsFile) {
accessToken = (await getToken(serviceCredentialsFile)).accessToken;
}
// Instantiate withe AEM Headless client to query AEM GraphQL APIs
// The endpoint is left blank since only persisted queries should be used to query AEM's GraphQL APIs
const aemHeadlessClient = new AEMHeadless({
serviceURL: aemHost,
endpoint: '', // Avoid non-persisted queries
auth: accessToken // accessToken only set if the 2nd command line parameter is set
})
...
}
Kör GraphQL beständig fråga
AEM beständiga frågor körs över HTTP GET och därför används klienten AEM Headless för Node.js för att köra de beständiga GraphQL-frågorna mot AEM och hämta äventyrsinnehållet.
Den beständiga frågan anropas genom att aemHeadlessClient.runPersistedQuery(...)
anropas och det beständiga GraphQL-frågenamnet skickas. När GraphQL returnerar data skickar du dem till den förenklade funktionen doSomethingWithDataFromAEM(..)
som skriver ut resultaten, men skickar vanligtvis data till ett annat system eller genererar utdata baserat på hämtade data.
// index.js
async function run() {
...
try {
// Retrieve the data from AEM GraphQL APIs
data = await aemHeadlessClient.runPersistedQuery('wknd-shared/adventures-all')
// Do something with the data from AEM.
// A common use case is sending the data to another system.
await doSomethingWithDataFromAEM(data);
} catch (e) {
console.error(e.toJSON())
}
}