小编Gar*_*ary的帖子

如何在nodejs中使用crypto.randomBytes使用async/await?

const crypto = require('crypto');

async function getKey(byteSize) {
    let key = await crypto.randomBytes(byteSize);
    return key;
}

async function g() {
    let key = await getKey(12);
    return key;
}

console.log(g());

console.log('hello - want this called after g() above');
Run Code Online (Sandbox Code Playgroud)

我已经这样做了一个小时,但我不明白如何确保我使用 async/await 获得密钥。无论我做什么,我都会收到一个待处理的 Promise。

我也尝试过这个:

async function getKey(byteSize) {
    let key = await crypto.randomBytes(byteSize);
    return key;
}

getKey(12).then((result) => { console.log(result) })


console.log('hello');
Run Code Online (Sandbox Code Playgroud)

……没有用!其灵感来自: How to use wait with promisify for crypto.randomBytes?

谁能帮我这个?

我想做的就是获得 randomBytes 异步。使用 async./await 块,但在继续代码之前确保它履行承诺。

javascript node.js

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

有没有办法测试我的正则表达式是否容易受到灾难性回溯的影响?

关于这个主题有很多问题,但我不确定我的正则表达式是否容易受到攻击。以下正则表达式是我用于电子邮件验证的正则表达式:

/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email)
Run Code Online (Sandbox Code Playgroud)

因为我在一些地方使用了 *,所以我怀疑可能是这样。

我希望能够测试代码中出现的任意数量的问题。

我正在使用 Node.js,因此考虑到事件循环的单线程性质,这可能会完全关闭我的服务器。

regex

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

Node.js:与 Redis(或其他内存中键/值存储)相比,内存中的变量

我想存储一些信息。在 node.js 数组变量(作为本地缓存)中,我的中间件在进行数据库查询之前会检查该变量。

我知道我可以使用 redis 来完成此操作,并且它通常是首选方法 b/c redis 提供持久性快照并且性能相当高,但我无法想象有什么比存储在内存中的变量性能更高。

然而,每次有人提出这个话题时,人们都会说“内存泄漏”让这是一个坏主意。但为什么?为什么 Node.js 不擅长管理服务器端变量?

是否有通过 node.js 管理服务器端数组/缓存的首选方法(在外部 k/v 数据库存储之外)?

memcached redis node.js

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

Stripe Checkout - 结账页面上是否可以显示多张图片?

在下面的 line_items.items.price_data.product_data.images 数组中,我输入了两张图像,但只显示一张。有没有办法在结账页面上看到两张图片?

app.post('/create-checkout-session', async (req, res) => {
  const domainURL = process.env.DOMAIN;

  const { quantity, locale } = req.body;

  const session = await stripe.checkout.sessions.create({
    payment_method_types: process.env.PAYMENT_METHODS.split(', '),
    mode: 'payment',
    locale: locale,
    line_items: [
      {
        // price: process.env.PRICE,
        price_data: {
          currency: 'usd',
          unit_amount: 1000,
          product_data: {
            name: 'Product name ...',
            images: [
              'https://picsum.photos/280/320?random=4',
              'https://picsum.photos/280/320?random=2',
            ],
          },
        },
        quantity: quantity,
        description: 'My description ...',
      },
    ],
    success_url: `${domainURL}/success.html?session_id={CHECKOUT_SESSION_ID}`,
    cancel_url: `${domainURL}/canceled.html`,
  });

  res.send({
    sessionId: session.id,
  });
});
Run Code Online (Sandbox Code Playgroud)

文档(https://stripe.com/docs/api/checkout/sessions/create#create_checkout_session-line_items-price_data-product_data-images)建议我可以:

line_items.price_data.product_data.images
optional …
Run Code Online (Sandbox Code Playgroud)

node.js stripe-payments

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

为什么即使传递使用 useMemo 记忆的 props,React 也会重新渲染子组件?

我遇到了这个答案,它似乎解决了这个问题:React何时重新渲染子组件?

但我在这里问一个更微妙的问题。为什么 React 在使用useMemohook 时(通常)会重新渲染子组件?

在下面的示例中,我希望ChildMchild组件都不会在输入 onChange 事件上重新渲染,但只是Mchild不会重新渲染。Child每次按键时都会呈现。

有人能解释一下为什么 React 会这样做吗?我想我要问的是,我不明白为什么 React 默认不这样做。使用始终使用的子组件模式有什么缺点React.memo

import React, { useMemo, useState } from "react";

const Child = ({ person, which }: any) => {
  console.log(`${which} render`);

  return <div>{`From child component: ${person.first}`}</div>;
};

const Mchild = React.memo(Child);

function Parent() {
  console.log("Parent render");

  const [message, setMessage] = useState<string>("");

  const person = { first: "gary", last: "johnson" };
  const mPerson = useMemo(() => …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs

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

RPC 与 Restful 端点

我花费了比我愿意承认的更多的时间来尝试理解 RPC 和 Restful 端点之间的差异。事实上,在深入这个兔子洞之后,我什至不确定我是否完全理解 RPC 是什么了。我并不孤单。我看到无数的消息反复要求澄清。

到目前为止我的理解是:

RPC 和 Restful 端点本质上很大程度上只是概念性的。没有标准。

两者都是调用远程服务器上的函数的方法。

对于静态端点,我们将 HTTP 方法映射到资源上的 CRUD 操作。

对于 RPC,我们关心的是对象上的操作。

然而,在这两种情况下,我们都在解决远程方法调用。

我读过一些人说,宁静不应该是有状态的,如果是的话,那就不是宁静的。但是大多数宁静的端点不是通过会话使用状态吗?我的意思是,我不会让任何人在未登录的情况下删除数据。

我还读到像domain(.)com/login 这样的函数并不是安静的,因为它是一个动作。这似乎是有道理的,但由于我在服务器上编写的函数与简单的 Restful 函数没有任何不同,所以我们如何称呼它们(Restful 与 RPC)真的很重要吗?

我真的不明白我错过了什么,而且迄今为止 StackOverflow 上似乎还没有帖子可以解决这个困惑。

希望有人能够使用上述内容作为理解指南提供一些见解。提前致谢。

rest rpc

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

访问器仅在针对 ECMAScript 5 及更高版本时可用 - 使用 TypeScript 时出现错误消息

当我尝试使用“tsc file.ts”编译以下 TypeScript 时,出现以下错误(两次):

错误 TS1056:访问器仅在针对 ECMAScript 5 及更高版本时可用。

根据 StackOverflow 上的这篇文章 -访问器仅在针对 ECMAScript 5 及更高版本时可用- 我应该能够指定一个“tsconfig.json”文件,我已经这样做了:

{
  "compilerOptions": {
    "target": "ES5"
  }
}
Run Code Online (Sandbox Code Playgroud)
export class CPoint {
  constructor(private _x?: number, private _y?: number) {
  };

  public draw() { 
    console.log(`x: ${this._x} y: ${this._y}`);
  }

  public get x() {
    return this._x;
  }

  public set x(value: number) {
    if (value < 0) {
      throw new Error('The value cannot be less than 0.');
    }

    this._x = value;
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用 --target …

typescript

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

在 JavaScript 中,异步代码是如何真正工作的?

过去两周我一直在学习以下内容:setImmediate、process.nextTick、setTimeout、promises、callbacks、libuv、事件循环、作业/微任务队列、事件循环队列、调用堆栈等。

我真的掉进了一个无法逃脱的兔子洞,虽然我发现自己有更多的见识,但我仍然无法掌握 JavaScript 中的异步代码。

我想采用以下基本场景并了解如何异步实现它:

// does nothing; here to simulate functionality below
var data = new Array(10000000);

const displayTime = desc => {
  var time = new Date();
  console.log(
    ("0" + time.getHours()).slice(-2) + ":" +
    ("0" + time.getMinutes()).slice(-2) + ":" +
    ("0" + time.getSeconds()).slice(-2) + " " + desc
  );
}

displayTime('starting ...');

// --- async/await (a promise):

const processData = async(data) => {
  let dataLen = data.length;
  let processedData = [];
  //console.time('#1');
  for (let ctr = 0; ctr …
Run Code Online (Sandbox Code Playgroud)

javascript node.js

0
推荐指数
1
解决办法
368
查看次数

尝试/捕获 C++ 程序中的所有块不起作用

C++ 中的 Try/catch 块未被“捕获”。我正在尝试使用一个 catch 块来获取所有异常。

#include <iostream>
#include <exception>

using namespace std;

int main()
{
  try
  {
    throw 1;
  }
  catch (exception& e)
  {
    cout << "ERROR: " << e.what() << endl;

    return 1;
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
79
查看次数