所以我使用Yup进行了以下验证:
const myValidtion = yup
.string()
.trim()
.matches(/[abcdefghijklmnopqrstuvwxyz]+/ , 'Is not in correct format')
.required();
Run Code Online (Sandbox Code Playgroud)
所以有了这个,这将通过:hello world正如预期的那样。但让我感到困惑的是为什么这也会通过:hello WORLD或者这也会通过:hello ,&$#$ world
另一方面,如果我们只输入这样的无效字符,*%$&#$($#就不会通过并向我显示错误。正如我所看到的,如果所有条目都无效,这只会给我错误。
我正在寻找的是如何使用 Yup 匹配方法在用户输入时不通过,例如: hello ,*&) world
谁能帮我这个?
所以我有一个这种格式的网址。:
https://my-app.com/my-route/someOtherRoute#register?param1="122"¶m2="333"
Run Code Online (Sandbox Code Playgroud)
我知道如何获取普通网址的查询字符串,但我无法获取后面的查询字符串#
我使用node-url到目前为止我已经这样做了:
import * as urlTool from 'url';
const url = "https://my-app.com/my-route/someOtherRoute#register?param1="122"¶m2="333"
const parsedUrl = urlTool.parse(url,true);
const { pathName, hash } = parsedUrl
Run Code Online (Sandbox Code Playgroud)
所以到目前为止,我hash有这个值#register?param1="122"¶m2="333",但是如何以动态方式获取查询字符串,因为查询字符串可能或可能不一直存在,而且我也不知道它们的名称,如何我可以获得#url之后可能出现的任何查询字符串吗?
我想制作一个有 5 个可选查询参数的 API,我想知道是否有更好的方法来处理这个问题,现在我用 if 条件检查每个参数,这有点脏!有什么方法可以在不使用大量 if 条件的情况下处理所有场景?
let songName = req.query.songName
let singerName = req.query.singerName
let albumName = req.query.albumName
let publishDate = req.query.publishDate
if(songName && singerName && albumName && publishDate) {
const response = songs.filter(c => {
return c.songName === songName && c.singerName === singerName && c.albumName === albumName && c.publishDate === publishDate
}
res.send({
"Data" : response
})
}
if(songName && singerName && albumName && !publishDate) {
const response = songs.filter(c => {
return c.songName === songName && …Run Code Online (Sandbox Code Playgroud) 因此,我需要Which is not at bottom om screen按设计将按钮对准屏幕的中间,但对于所有设备,它应对准键盘的顶部。
如果您查看此屏幕截图:
对于某些设备,我会竭力做到这一点,但在某些其他设备中,并没有真正做到:
我该如何管理所有这些?
这是我到目前为止所做的:
<Padding paddingVertical={isKeyboardOpen ? Spacing.unit : Spacing.small}>
<Button
variant="solid"
label='Next'
style={styles.submitBtn}
/>
</Padding>
Run Code Online (Sandbox Code Playgroud)
isKeyboardOpen只是一种方法,它将基于平台(如果键盘打开)返回true来创建列表器:
Keyboard.addListener(
Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow',
true
);
Run Code Online (Sandbox Code Playgroud)
并且submitBrn css类是:
submitBtn: {
margin: Spacing.base,
},
Run Code Online (Sandbox Code Playgroud) 这是我的dockerfile:
FROM node:6-onbuild
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm install
COPY . /usr/src/app
ENV PORT 80
EXPOSE ${PORT}
CMD [ "npm","run", "start" ]
Run Code Online (Sandbox Code Playgroud)
在package.json我有这个:
"scripts": {
"start": "node start.js",
"stagestart": "NODE_ENV=content-staging node start.js"
}
Run Code Online (Sandbox Code Playgroud)
该start脚本是用于生产的,现在我想要一种在dockerfile中运行staging脚本的方法.有没有办法在dockerfile中读取NODE_ENV,所以我可以有一个dockerfile来处理staging和production.
我有一个将一些文件上传(复制)到另一个AWS账户中的S3存储桶中的应用程序,我使用来自AWS开发工具包(Nodejs)的copyObject命令
var params = {
Bucket: "MyBucket_AccountB",
CopySource: encodeURI('/Accunt_A_Bocket/file.png'),
Key: "file.png",
ACL: 'bucket-owner-full-control'
};
s3.copyObject(params, function(err, datas) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(datas); // successful response
});
Run Code Online (Sandbox Code Playgroud)
假设此代码是从另一个AWS帐户运行的,AWS_ACCOUNT_A则文件上传到中的S3存储桶AWS_ACCOUNT_B情况是,当文件上传到此存储桶时,该文件的所有权仍然是AWS_ACCOUNT_A。
我想知道AWS_ACCOUNT_B在上传文件时该如何赋予文件所有权。这里有人可以给我一些指导吗?
更新:
我使用了这个政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::MY_ACCOUNT_B_ID:root"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::MYBUCKET_IN_ACCOUNT_A",
"arn:aws:s3:::MYBUCKET_IN_ACCOUNT_A/*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
但上传的文件仍归拥有Account_A,我在政策中做错了什么吗?
所以我想在测试中模拟一个日期,这就是我所做的:
const mockDate = new Date('2018-01-01');
const backupDate = Date;
beforeEach(() => {
(global.Date as any) = jest.fn(() => mockDate);
})
afterEach(() => {
(global.Date as any) = backupDate;
jest.clearAllMocks();
});
const backupDate = Date;
(global.Date as any) = jest.fn(() => mockDate);
expect(myModule).toMatchSnapshot();
(global.Date as any) = jest.fn(() => backupDate);
Run Code Online (Sandbox Code Playgroud)
因此,此测试在我的本地环境中工作正常,并且与快照匹配:
exports[`should match with date`] = `
[MockFunction] {
"calls": Array [
Array [
Object {
"myDate" : "Mon Jan 01 2018 01:00:00 GMT+0100 (Central European Standard Time)"
}]]}
Run Code Online (Sandbox Code Playgroud)
但是在生产环境中,我得到了这个,导致测试失败: …
我做了一些 Hackerrank 挑战来提高我解决问题的能力,所以其中一个挑战是关于从一组数字中找到总的最大数字。例如,如果我们有3 2 1 3 1 3它应该返回3
这就是我所做的:
function birthdayCakeCandles(ar) {
let total= 0
let sortedArray = ar.sort((cur,next)=>{
return cur<next
})
ar.map(item => {
if(item===sortedArray[0]) {
total ++;
}
})
return total
}
Run Code Online (Sandbox Code Playgroud)
所以我对给定的数组进行排序,然后映射整个数组并检查有多少数字等于该数组中的最大数字并计算总数。
这将通过 8/9 个测试用例,其中一个测试用例有一个长度为 100000 的数组,而这个数组失败了,这是该测试用例的给定数据。
真的不明白为什么在这个测试中失败了,这可能是因为JavaScript总是同步和单线程的吗?
我尝试使用 Promise 和 async await,但是hackerrank 会将第一个返回值视为输出(即 Promise 本身)并且它不使用解析值作为输出,因此无法真正测试这一点。
我的逻辑有问题吗?
javascript ×5
node.js ×5
typescript ×3
amazon-s3 ×1
arrays ×1
aws-sdk ×1
docker ×1
dockerfile ×1
express ×1
if-statement ×1
jestjs ×1
mocking ×1
react-native ×1
reactjs ×1
s3-bucket ×1
unit-testing ×1
url ×1
url-routing ×1
validation ×1
yup ×1