小编Hol*_*yol的帖子

如何使用 AWS SDK v3 将流上传到 S3

我必须将文件从 API 端点传输到两个不同的存储桶。原始上传是使用:

curl -X PUT -F "data=@sample" "http://localhost:3000/upload/1/1"
Run Code Online (Sandbox Code Playgroud)

文件上传的端点:

curl -X PUT -F "data=@sample" "http://localhost:3000/upload/1/1"
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我使用两个PassThrough流,以便将请求流复制为两个可读流,如该 SO thread 中所建议的。

这段代码保持不变,这里有趣的是uploadToFirstS3uploadToSecondS3函数。在这个最小的示例中,两者使用不同的配置执行完全相同的操作,我在这里仅使用一个。

什么效果好:

const PassThrough = require('stream').PassThrough;

async function uploadFile (req, res) {
  try {
    const firstS3Stream = new PassThrough();
    const secondS3Stream = new PassThrough();
    req.pipe(firstS3Stream);
    req.pipe(secondS3Stream);

    await Promise.all([
      uploadToFirstS3(firstS3Stream),
      uploadToSecondS3(secondS3Stream),
    ]);
    return res.end();
  } catch (err) {
    console.log(err)
    return res.status(500).send({ error: 'Unexpected error during file upload' });
  }
}
Run Code Online (Sandbox Code Playgroud)

这段代码(基于aws-sdk包)工作正常。我的问题是,我希望它与 …

stream node.js aws-sdk-nodejs aws-sdk-js-v3

35
推荐指数
2
解决办法
4万
查看次数

PropTypes:PropTypes.array VS PropTypes.arrayOf(PropTypes.any)

考虑一下:

import PropTypes from 'prop-types';

[...]

Component.propTypes = {
  someProp: PropTypes.array,
}
Run Code Online (Sandbox Code Playgroud)

和 :

import PropTypes from 'prop-types';

[...]

Component.propTypes = {
  someProp: PropTypes.arrayOf(PropTypes.any),
}
Run Code Online (Sandbox Code Playgroud)

第一个会eslint在编辑器中触发错误:

Prop type 'array' is forbidden eslint(react/forbid-prop-types)

但是,如果不遵守条件,它们都会触发相同的错误,并且根据文档,它的行为应该完全相同。

这两个验证之间有什么区别吗?

(我可以忽略这个错误吗?)

reactjs eslint react-proptypes

4
推荐指数
1
解决办法
6541
查看次数

esbuild + knex:找不到模块'../../dialects/mysql/index.js'

我目前正在尝试将一些代码从 javascript 迁移到 typescript。此代码使用knex包。我可以使用 来构建和运行它tsc,但我想使用它esbuild(为了更快的构建)。

我用以下方法构建:

npx esbuild index.ts --bundle --platform=node --sourcemap=external --outfile=dist/index.js
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行编译后的代码时,我得到:

Cannot find module '../../dialects/mysql/index.js'
Run Code Online (Sandbox Code Playgroud)

我不知道这个dialect目录是什么,也找不到任何有关它的文档。我看了一下这个SO问题,但无法真正理解其中的代码,并且错误似乎更多是关于browserified.

这是我用来重现错误的代码:

Cannot find module '../../dialects/mysql/index.js'
Run Code Online (Sandbox Code Playgroud)

有趣的是,仅使用mysqlwithout 包knex可以很好地与tsc和一起使用esbuild

由于某种原因,只有构建esbuild失败。我首先以为我错过了一个包,然后我安装了@types/node@types/mysql但它没有解决我的问题。

如果有帮助,我使用以下内容tsconfig.json

import Knex from 'knex';

const knex = Knex({
  client: 'mysql',
  connection: {
    port: 3306,
    host: 'localhost',
    database: 'database',
    user: 'user',
    password: 'password',
    charset: 'utf8mb4', …
Run Code Online (Sandbox Code Playgroud)

typescript knex.js esbuild

2
推荐指数
1
解决办法
1479
查看次数