1

我正在尝试在我的 Angular 应用程序中添加 sqs,以便我的后端可以向我的前端发送通知。我找到了这个例子,但他们没有解释如何登录。

带有源代码的仓库在这里:https ://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javascriptv3/example_code/sqs/src/sqs_receivemessage.ts

我也像这样安装了sdk,npm i @aws-sdk/client-sqs但是在npm repo中他们没有解释如何配置authent。

我该怎么办?

/* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
ABOUT THIS NODE.JS EXAMPLE: This example works with AWS SDK for JavaScript version 3 (v3),
which is available at https://github.com/aws/aws-sdk-js-v3. This example is in the 'AWS SDK for JavaScript v3 Developer Guide' at
https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/sqs-examples-send-receive-messages.html.
Purpose:
sqs_receivemessage.ts demonstrates how to receive and delete a message from an Amazon SQS queue.
Inputs (replace in code):
- REGION
- SQS_QUEUE_URl
Running the code:
ts-node sqs_receivemessage.js
 */
// snippet-start:[sqs.JavaScript.messages.receiveMessageV3]

// Import required AWS SDK clients and commands for Node.js
const {
  SQSClient,
  ReceiveMessageCommand,
  DeleteMessageCommand,
} = require("@aws-sdk/client-sqs");

// Set the AWS Region
const REGION = "REGION"; //e.g. "us-east-1"

// Set the parameters
const queueURL = "SQS_QUEUE_URL"; //SQS_QUEUE_URL; e.g., 'https://sqs.REGION.amazonaws.com/ACCOUNT-ID/QUEUE-NAME'
const params = {
  AttributeNames: ["SentTimestamp"],
  MaxNumberOfMessages: 10,
  MessageAttributeNames: ["All"],
  QueueUrl: queueURL,
  VisibilityTimeout: 20,
  WaitTimeSeconds: 0,
};

// Create SQS service object
const sqs = new SQSClient({ region: REGION });

const run = async () => {
  try {
    const data = await sqs.send(new ReceiveMessageCommand(params));
    if (data.Messages) {
      var deleteParams = {
        QueueUrl: queueURL,
        ReceiptHandle: data.Messages[0].ReceiptHandle,
      };
      try {
        const data = await sqs.send(new DeleteMessageCommand(deleteParams));
        console.log("Message deleted", data);
      } catch (err) {
        console.log("Error", err);
      }
    } else {
      console.log("No messages to delete");
    }
  } catch (err) {
    console.log("Receive Error", err);
  }
};
run();
// snippet-end:[sqs.JavaScript.messages.receiveMessageV3]

编辑 我在文件中添加"C:\Users\koste\.aws\config"

[default]
aws_access_key_id=AKIA4LUIXXXXXY3SE3RO
aws_secret_access_key=yJKM96KISxxxxxxxxxxxxxOhajncWXe0YXo
region = eu-west-3

[sqs-dev]
aws_access_key_id=AKIAXXXXXXXXXXG46ZUET
aws_secret_access_key=XgGq2mbxxxxxxxLRfchaxw0FvAKVWpuXO0
region = eu-west-3

还是行不通。我进入控制台

Receive Error ReferenceError: process is not defined
    loadSharedConfigFiles index.js:11
    parseKnownFiles index.js:102
    fromIni index.js:31
    memoize memoize.js:22
    step tslib.es6.js:102
    verb tslib.es6.js:83
    __awaiter tslib.es6.js:76
    ZoneAwarePromise Angular
    __awaiter tslib.es6.js:72
    memoize memoize.js:16
    signRequest SignatureV4.js:169
    step tslib.es6.js:102
    verb tslib.es6.js:83
    __awaiter tslib.es6.js:76
    ZoneAwarePromise Angular
    __awaiter tslib.es6.js:72
    signRequest SignatureV4.js:165
    sign SignatureV4.js:85
    step tslib.es6.js:102
    verb tslib.es6.js:83
    __awaiter tslib.es6.js:76
    ZoneAwarePromise Angular
    __awaiter tslib.es6.js:72
    sign SignatureV4.js:76
    awsAuthMiddleware middleware.js:31
    step tslib.es6.js:102
    verb tslib.es6.js:83
    fulfilled tslib.es6.js:73
    Angular 21
    RxJS 21
    ZoneAwarePromise Angular
    toPromise RxJS
    signIn auth.service.ts:211
    fulfilled tslib.es6.js:73
    Angular 22
    streamCollector index.js:6
    collectBody Aws_json1_1.js:3514
    collectBodyString Aws_json1_1.js:3518
    parseBody Aws_json1_1.js:3533
    deserializeAws_json1_1GetCredentialsForIdentityCommand Aws_json1_1.js:724
    step tslib.es6.js:100
    verb tslib.es6.js:81
    __awaiter tslib.es6.js:74
    ZoneAwarePromise Angular
    __awaiter tslib.es6.js:70
    deserializeAws_json1_1GetCredentialsForIdentityCommand Aws_json1_1.js:716
    deserialize GetCredentialsForIdentityCommand.js:32
    deserializerMiddleware deserializerMiddleware.js:7
    fulfilled tslib.es6.js:71
    Angular 11

编辑 2

我什至设置了环境变量,但仍然遇到同样的问题

set AWS_ACCESS_KEY_ID=AKIA4XXXXXXXXXXXXX6ZUET
set AWS_SECRET_ACCESS_KEY=XgGq2mbYQvnXXXXXXXXXXXXXXXXXXXXXXXXO0

编辑 3 我查看了 sdk 并且进程变量在 sdk 中使用但没有声明,这就是我有错误的原因

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var os_1 = require("os");
var path_1 = require("path");
var fs_1 = require("fs");
exports.ENV_CREDENTIALS_PATH = "AWS_SHARED_CREDENTIALS_FILE";
exports.ENV_CONFIG_PATH = "AWS_CONFIG_FILE";
var swallowError = function () { return ({}); };
function loadSharedConfigFiles(init) {
    if (init === void 0) { init = {}; }
    var _a = init.filepath, filepath = _a === void 0 ? process.env[exports.ENV_CREDENTIALS_PATH] ||
        path_1.join(getHomeDir(), ".aws", "credentials") : _a, _b = init.configFilepath, configFilepath = _b === void 0 ? process.env[exports.ENV_CONFIG_PATH] ||
        path_1.join(getHomeDir(), ".aws", "config") : _b;
4

2 回答 2

1

此内容是适用于 JavaScript 的 AWS 开发工具包开发指南的一部分,其中解释了所有这些概念,例如处理凭证。请参阅开发指南

如果您不知道如何启动和运行 API,请参阅入门部分。Cred 的具体信息位于此处:

https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/getting-your-credentials.html

成功后,您可以查看更完整的示例,例如跨服务示例部分下的内容。

于 2021-05-08T13:13:42.420 回答
0

解决方案在这里: https ://github.com/aws/aws-sdk-js-v3/issues/2386#event-4744209781

浏览器不能使用凭证文件。

于 2021-05-13T23:38:12.323 回答