首页 > 解决方案 > 无法将 nodejs 模块导入 CustomActivity.js

问题描述

我正在尝试对 REST-API 执行 https 请求,以获取稍后将在 HTML 中的选择下拉列表中注入的一些值(id 为 #bannerCategory 的元素)。下面是我的index.html的片段(它本身位于文件夹send-campaign-banner 下-请参阅本问题末尾的项目树):

    <script type="text/javascript" src="vendors/postmonger/postmonger.js"></script>
    <script type="text/javascript" src="vendors/jquery/dist/jquery.js"></script>
    <script type="text/javascript" src="vendors/requirejs/require.js"></script>
    <script type="text/javascript">
            (function () {
                var config = {
                    baseUrl: '/journeybuilder/send-campaign-banner',
                    paths: {
                        js: 'js',
                        postmonger: 'vendors/postmonger/postmonger',
                        jquery: 'vendors/jquery/dist/jquery'
                    },
                };
    
                var dependencies = [
                    'js/sendCampaignBanner',
                    'vendors/postmonger/postmonger',
                    'vendors/jquery/dist/jquery'
                ];
    
                require(config, dependencies);
    
    
            })();
    
    </script>
    <body>
        <div id="step1" class="step">
            <div class="slds-grid">
                <main class="slds-col">
                    <h4>Journey Banner Sender</h4>
                    <p class="text-secondary">Please fill in the form below:</p>
                    <form>
                    <div class="form-group row">
                            <label for="bannerCategory" class="col-sm-2 col-form-label">
                                Banner category
                            </label>
                            <div class="col">
                                    <select id="bannerCategory">
    
                                     <option value="ofertas_descontos">Descontos</option>
                                      <option value="ofertas_sem_juros">Sem Juros</option>
                                      <option value="recomendacoes_especiais">Recomendações</option>
                                    </select>
                            </div>
                    </div>
                    </form>
                </main>
            </div>
        </div>
    </body>

每当我尝试通过 XMLHttpRequest 在 index.html 中的脚本标记内执行 HTTP 请求时,我都会收到以下错误:

Access to XMLHttpRequest at 'https://sonaefs-pp.azure-api.net/campaignsmoduleint/v1/api/category/' from origin 'https://sfmc-ca-dev.herokuapp.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

虽然,CORS 应该不是问题,因为我可以通过 Postman 等工具执行请求,因为我需要设置一个自定义标头来授权请求​​。使用 XMLHttpRequest 时会添加相同的标头,但我想这不是假设的。我想到的唯一解决方案是要求 REST-API 的开发人员在服务器端包含标头。但这不是我喜欢的解决方案,因为我可以使用模块“https”在服务器端 js(azure.js,检查下面的项目树)上执行请求,只要我将相同的标头传递给每个 https 请求.

因此,由于我正在使用 nodejs,我认为这可能是一个异步问题。所以,我有了使用模块 https 并执行异步调用的想法。所以我尝试在加载自定义activity前端的同时加载这个模块,如下图(这里是sendCampaignBanner.js):

define([
    'postmonger',
    'jquery',
    'https'
], function (
    Postmonger, $, https
) {
'use strict';

var connection = new Postmonger.Session();
var authTokens = {};
var payload = {};

// When app is rendered, trigger onRender()
$(window).ready(onRender);

不幸的是,我收到以下错误:

require.js:143 Uncaught Error: Script error for "https", needed by: js/sendCampaignBanner
https://requirejs.org/docs/errors.html#scripterror
    at makeError (require.js:168)
    at HTMLScriptElement.onScriptError (require.js:1738)

此外,为进一步参考检查我的 nodejs 项目树:

│   .gitignore
│   app.js
│   lab.http
│   package-lock.json
│   package.json
│   README.md
│
│
├───icons
├───lib
│       azure.js
│       fuel-auth.js
│       fuel-helpers.js
│       fuel-rest.js
│       jwtDecoder.js
│       sfmc.js
│       utils.js
│
├───public
│   │   custom.css
│   │   index.html
│   │
│   └───activities
│       ├───log-communication-event
│       ├───log-journey-event
│       ├───log-segment-association
│       ├───log-target-control-association
│       ├───send-banners
│       └───send-campaign-banner
│           │   config.json
│           │   index.html
│           │
│           ├───css
│           ├───images
│           └───js
│                   sendCampaignBanner.js
│
└───routes
│        activityLogCommunicationEvent.js
│        activityLogJourneyEvent.js
│        activityLogSegmentAssociation.js
│        activityLogTargetControlAssociation.js
│        activitySendBanners.js
│        activitySendCampaignBanner.js
│        activityUtils.js
│        index.js

如果您可能需要更多详细信息,请告诉我,以帮助这个苦苦挣扎的 nodejs 士兵:)

干杯,祝您周末愉快,迪奥戈·佩雷拉。

标签: javascriptnode.jssalesforce-marketing-cloudcustom-activityjourney

解决方案


推荐阅读