小编Ani*_*aje的帖子

NodeJs 中的 next() 是什么?

我是来自 Java 背景的 NodeJs 新手,我试图了解约定next()调用的使用。

我已经浏览了以下帖子 -
1. javascript node.js next()
2. https://www.naeemrana.com/node-js/express-js-middleware-what-is-next/
3.何时在 Node.js 中使用 next() 并返回 next()

我可以理解的是 next() 类似于回调,或者可能是当前函数执行后要执行的下一个函数的引用,
也理解建议使用return next();而不是next();避免函数被重新执行。

以下是来自链接之一的示例代码 -

app.get('/users/:id', function(req, res) {
    var user_id = req.params.id;

    if(user_id) {
      // do something
    } else {
      next(); // here comes middleware.
    }
});
Run Code Online (Sandbox Code Playgroud)

我这里不明白的是正在执行的函数没有第三个参数,
但它确实调用了 next() 函数,这里的想法是什么?
此约定的使用仅用于路由逻辑吗?
next() 是回调吗?它是对下一个要执行的函数的引用吗?或者是其他东西?

javascript node.js

6
推荐指数
1
解决办法
9000
查看次数

如何使用多个索引查询 AWS DynamoDB?

我有一个具有以下项目结构的 AWS DynamoDb 购物车表 -

{
  "cart_id": "5e4d0f9f-f08c-45ae-986a-f1b5ac7b7c13",
  "user_id": 1234,
  "type": "OTHER",
  "currency": "INR",
  "created_date": 132432423,
  "expiry": 132432425,
  "total_amount": 90000,
  "total_quantity": 2,  
  "items": [
    {
      "amount": 90000,
      "category": "Laptops",
      "name": "Apple MacBook Pro",
      "quantity": 1
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

——

{
  "cart_id": "12340f9f-f08c-45ae-986a-f1b5ac7b1234",
  "user_id": 1234,
  "type": "SPECIAL",
  "currency": "INR",
  "created_date": 132432423,
  "expiry": 132432425,
  "total_amount": 1000,
  "total_quantity": 2,  
  "items": [
    {
      "amount": 1000,
      "category": "Special",
      "name": "Special Item",
      "quantity": 1
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

该表将cart_id作为主键、
user_id作为索引或 GSI、
type作为索引或 GSI。 …

amazon-web-services nosql amazon-dynamodb

6
推荐指数
1
解决办法
8360
查看次数

如何将数据从 AWS API Gateway 自定义授权方传递到 AWS Lambda 函数?

我正在使用 AWS API Gateway 的自定义授权程序来验证应用程序的令牌,
我能够正确使用自定义授权程序,
即。能够验证令牌并返回 IAM 策略,
该策略决定是否允许将请求转发到业务逻辑 Lambda 函数。

我现在需要将附加数据从自定义授权方发送到业务逻辑 Lambda,

到目前为止,我发现有两种方法可以实现此目的 -
1. 将数据字符串化为要返回的策略中的主体 Id。
2.在策略的Context对象中设置数据$context.authorizer.<key>,可以根据代码检索该数据

我正在尝试第二种方法,但无法检索在业务逻辑 Lambda 的上下文中设置的数据。

我正在使用此 GitHub 存储库中的 NodeJs 代码 -
https://github.com/awslabs/aws-apigateway-lambda-authorizer-blueprints/blob/master/blueprints/nodejs/index.js

我无法查看默认上下文设置代码 -

authResponse.context = {
    key : 'value', // $context.authorizer.key -> value
    number : 1,
    bool: true
};
Run Code Online (Sandbox Code Playgroud)

以下是业务逻辑 Lambda 函数中的事件对象日志 -

Event: {
    type: 'REQUEST',
    methodArn: 'someARN',
    resource: 'somePath',
    path: 'somePath',
    httpMethod: 'GET',
    headers: {
        accept: '*/*',
        'accept-encoding': 'gzip, deflate, br',
        'accept-language': 'en-US,en;q=0.9',
        authorization: 'someToken',
        'cache-control': …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services node.js aws-lambda

6
推荐指数
1
解决办法
5744
查看次数

如何在 GitLab 运行器容器中安装包?

我正在尝试使用 GitLab runner 实现一些 CICD,
我对容器非常陌生,并尝试在容器中安装 zip 包,
我能够使用 pip 安装 awscli,但是,我无法安装 zip 包,这是我的 shell 脚本需要。

以下是 .gitlab-ci.yml 文件 -

stages:
    - build

build:
    image: python:latest
    stage: build
    script:
        - pip install awscli
        - yum install zip
        - bash cicdScript.sh
Run Code Online (Sandbox Code Playgroud)

我正在使用 python 容器,因为我的脚本需要 awscli,
但还需要 zip 包,
我尝试了以下操作 -

1)

script:
            - pip install awscli
            - yum install zip
            - bash cicdScript.sh
Run Code Online (Sandbox Code Playgroud)

给出 -

/bin/bash: line 82: yum: command not found
Run Code Online (Sandbox Code Playgroud)

2)

script:
            - pip install awscli
            - apt-get install …
Run Code Online (Sandbox Code Playgroud)

linux command-line-interface gitlab docker

6
推荐指数
1
解决办法
3761
查看次数

Angularjs从普通JS函数调用$ scope.function

我正在尝试实施一个google recapcha,我能够在它的帮助下验证用户是人,

reCapcha代码在我的代码中调用名为'verifyCallback'的回调函数.此外,我想调用在我的控制器范围内编写的AngularJS函数.

这是我目前的代码 -

主要的Html,我已经包括 -

<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script>
Run Code Online (Sandbox Code Playgroud)

Html偏 -

    var onloadCallback = function() 
    {
        grecaptcha.render('loginCapcha', {
            'sitekey' : 'someKey',
            'callback' : verifyCallback,
            'theme':'dark'

        });
    };

    var verifyCallback = function(response) 
    {
        //I get a response if user is able to solve the Capcha challenge
        console.log(response);

        //I want to call the function called 'auth' written in my AngularJS controller
        var scope = angular.element(document.getElementById('#loginCapcha')).scope();
        scope.auth();
    };

    <div id="loginCapcha"></div>
Run Code Online (Sandbox Code Playgroud)

AngularJS控制器 -

var _myApp = angular.module('homeApp',[]);

_myApp.controller('loginController',['$scope',
 function($scope){

    $scope.auth = function() …
Run Code Online (Sandbox Code Playgroud)

javascript recaptcha angularjs

5
推荐指数
1
解决办法
3712
查看次数

如何在 macOS 中离线配置和使用 Serverless?

我正在尝试使用无服务器离线库,使用无服务器框架,
我正确配置了 serverless.yaml 文件,其中 -

plugins:
  - serverless-offline
Run Code Online (Sandbox Code Playgroud)

添加到其中。

以下是我的 package.json -

{
  "name": "serverless-test",
  "version": "1.0.0",
  "description": "Lambda APIs for Test Module",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "./node_modules/.bin/serverless offline -s dev",
    "debug": "export SLS_DEBUG=* && node --debug ./node_modules/.bin/serverless offline -s dev"
  },
  "author": "Aniruddha",
  "license": "ISC",
  "dependencies": {
    "async": "^2.6.2",
    "aws-sdk": "^2.447.0",
    "axios": "^0.18.0",
    "jsonwebtoken": "^8.5.1",
    "moment": "^2.24.0",
    "moment-timezone": "^0.5.25",
    "mysql": "^2.17.1"
  },
  "devDependencies": {
    "serverless-offline": "4.9.4"
  }
}
Run Code Online (Sandbox Code Playgroud)

我使用以下命令来安装软件包 …

npm package.json serverless-framework serverless-offline

5
推荐指数
1
解决办法
9169
查看次数

如何使用 AWS CloudFormation 在 AWS API Gateway 上应用安全策略?

我有一个简单的 cloudformation 模板,它正在为 API 网关创建自定义域,
该模板能够创建自定义域。

但我找不到将其设置为的 cloudformation 属性Custom Domain Security PolicyTLS 1.2
模板使用默认值创建自定义域TLS 1.0 Security Policy

模板 -

AWSTemplateFormatVersion: 2010-09-09
Transform: 'AWS::Serverless-2016-10-31'
Description: Test Custom Domain

Resources:
  test:
    Type: AWS::ApiGateway::DomainName
    Properties: 
      CertificateArn: !Sub 'arn:aws:acm:${AWS::Region}:${AWS::AccountId}:certificate/xxxx-xxx-xxx-xxxx-xxxx'
      DomainName: 'test-api.example.com'
      EndpointConfiguration: 
        Types: 
          - 'EDGE'
Run Code Online (Sandbox Code Playgroud)

参考 -
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainname.html

amazon-web-services aws-cloudformation aws-api-gateway

5
推荐指数
2
解决办法
1509
查看次数

如何使用 AWS S3 签名 url 从 Postman 上传文件?

我想实现以下目标 -
1. 生成签名 URL
2. 使用 Postman 上传文件 (image.jpg) 到 URL

我正在使用 AWS Node SDK 创建 URL,
以下是代码 -

const AWS = require('aws-sdk');

AWS.config.update({
    region: 'us-east-1'
});

const s3 = new AWS.S3();

var presignedPUTURL = s3.getSignedUrl('putObject', {
    Bucket: 'some-bucket',
    Key: 'test/image.jpg',
    Expires: 3600
});

console.log(presignedPUTURL);
Run Code Online (Sandbox Code Playgroud)

该代码创建了一个 URL,如 -

https://some-bucket.s3.amazonaws.com/test/image.jpg?AWSAccessKeyId=ABCDxxx&Expires=1572339646&Signature=someSignaturexxx
Run Code Online (Sandbox Code Playgroud)

这是邮递员的回复-

<Code>SignatureDoesNotMatch</Code>
    <Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
Run Code Online (Sandbox Code Playgroud)

邮递员电话—— 在此处输入图片说明
-------------------------------------------------- ----------------------------- 在此处输入图片说明

我试过这个 -
https://medium.com/@aidan.hallett/securing-aws-s3-uploads-using-presigned-urls-aa821c13ae8d

我还尝试了各种组合,代码中的密钥和文件名的上传具有相同的名称,
不同的内容类型组合,
但没有运气。

amazon-s3 amazon-web-services node.js pre-signed-url postman

5
推荐指数
1
解决办法
3570
查看次数

AWS S3:MaxPostPreDataLengthExceeded 上传文件之前的 POST 请求字段太大

我正在尝试使用 AWS Javascript SDK 的 createPresignedPost 方法将文件上传到 AWS S3,
我使用以下代码生成用于上传的签名凭证 -

let AWS = require('aws-sdk');
let util = require('util');

let s3Client = new AWS.S3({
    region: 'us-east-1'
});

let postSignedUrl = async () => {

    try {
        let postSigningParams = {
            Expires: 60,
            Bucket: "some-bucket-name,
            Conditions: [["content-length-range", 100, 10000000]],
            Fields: {
                key: 'test/image.jpg'
            }
        }

        let s3createPresignedPost = util.promisify(s3Client.createPresignedPost).bind(s3Client);
        let postSignedUrl = await s3createPresignedPost(postSigningParams);

        console.log('postSigningParams => ', postSignedUrl);
    } catch (error) {
        console.error(error);
    }
}

postSignedUrl();
Run Code Online (Sandbox Code Playgroud)

我收到如下凭据 -

{
            "url": "https://s3.amazonaws.com/some-bucket-name", …
Run Code Online (Sandbox Code Playgroud)

javascript file-upload amazon-s3 amazon-web-services aws-sdk-js

5
推荐指数
1
解决办法
1924
查看次数

如何等待 AWS CloudFormation 堆栈创建或更新在 bash 中完成?

我有一个用例,我的 bash 脚本需要等待 AWS CloudFormation 完成创建或更新堆栈。

我发现可以使用以下命令来执行此操作:

aws cloudformation wait stack-create-complete --stack-name STACK_NAME

aws cloudformation wait stack-update-complete --stack-name STACK_NAME
Run Code Online (Sandbox Code Playgroud)

以下是脚本的片段 -

echo "Creating stack ..."

aws cloudformation create-stack --stack-name $STACK_NAME \
--parameters  ParameterKey=Environment,ParameterValue=Development \
--template-body file://someCfScript.yaml \
--capabilities CAPABILITY_AUTO_EXPAND --profile someProfileName

aws cloudformation wait stack-create-complete --stack-name $STACK_NAME
Run Code Online (Sandbox Code Playgroud)

但我无法这样做,并且出现以下错误:

{
    "StackId": "arn:aws:cloudformation:ap-southeast-1:someAwsAcId:stack/someStackName/xxxx-xxx-xx-xxx-xxxxx"
}

Waiter StackCreateComplete failed: Waiter encountered a terminal failure state
Run Code Online (Sandbox Code Playgroud)

脚本没有等待,而是转到下一行,导致事情中断。

bash amazon-web-services aws-cloudformation aws-cli

5
推荐指数
1
解决办法
6970
查看次数