我是来自 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() 是回调吗?它是对下一个要执行的函数的引用吗?或者是其他东西?
我有一个具有以下项目结构的 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。 …
我正在使用 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) 我正在尝试使用 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) 我正在尝试实施一个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) 我正在尝试使用无服务器离线库,使用无服务器框架,
我正确配置了 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)
我使用以下命令来安装软件包 …
我有一个简单的 cloudformation 模板,它正在为 API 网关创建自定义域,
该模板能够创建自定义域。
但我找不到将其设置为的 cloudformation 属性Custom Domain Security Policy,TLS 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)
我想实现以下目标 -
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
我正在尝试使用 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
我有一个用例,我的 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)
脚本没有等待,而是转到下一行,导致事情中断。
javascript ×3
node.js ×3
amazon-s3 ×2
angularjs ×1
aws-cli ×1
aws-lambda ×1
aws-sdk-js ×1
bash ×1
docker ×1
file-upload ×1
gitlab ×1
linux ×1
nosql ×1
npm ×1
package.json ×1
postman ×1
recaptcha ×1