小编PGT*_*PGT的帖子

Node.js lambda:如何在本地开发中导入公共层实用程序库,同时也可以在云中工作

我有一个 monorepo,在自己的文件夹中包含一些函数。我想创建一个具有实用功能的公共层,我可以require/import在本地使用它,也可以在部署到云后使用它。我想添加一个layers/目录来执行此操作,文件夹结构如下所示:

  A
  |- node_modules/
  |- package.json
  |- index.js
  B
  |- node_modules/
  |- package.json
  |- index.js
  layers
    |- nodejs
      |- node_modules
      |- package.json
      |- util.js
Run Code Online (Sandbox Code Playgroud)

我没有设置上面的文件夹结构,并且可以接受它的更改。

目前,我只有A和 以及B它们自己的独立依赖层(使用 编排terraform),并且它们在本地工作和部署都很好。

引入通用实用程序层后,问题是我可以在本地要求/导入,但在云中就不一样了(/opt/nodejs/*),但如果我将其更改为在云上工作,它将无法工作本地。

我没有使用该serverless框架。

amazon-web-services aws-lambda serverless aws-lambda-layers

7
推荐指数
0
解决办法
577
查看次数

Docker 中的 Next.JS v13 不考虑路径别名,但在本地工作

我有一个正在运行的 docker 版本,当我输入带有路径别名的绝对路径时,它突然开始抱怨module not found, can\'t resolve \'ComponentName\'

\n

它将失败于pnpm run build,但是当我在本地运行它时,它工作正常。

\n

tsconfig.json

\n
{\n  "compilerOptions": {\n    "target": "es5",\n    "lib": [\n      "dom",\n      "dom.iterable",\n      "esnext"\n    ],\n    "allowJs": true,\n    "skipLibCheck": true,\n    "strict": true,\n    "forceConsistentCasingInFileNames": true,\n    "noEmit": true,\n    "esModuleInterop": true,\n    "module": "esnext",\n    "moduleResolution": "node",\n    "resolveJsonModule": true,\n    "isolatedModules": true,\n    "jsx": "preserve",\n    "incremental": true,\n    "plugins": [\n      {\n        "name": "next"\n      }\n    ],\n    "baseUrl": ".",\n    "paths": {\n      "~/*": [\n        "./src/*"\n      ]\n    }\n  },\n  "include": [\n    "next-env.d.ts",\n    "**/*.ts",\n    "**/*.tsx",\n    ".next/types/**/*.ts"\n  ],\n  "exclude": [\n    "node_modules"\n …
Run Code Online (Sandbox Code Playgroud)

typescript docker reactjs dockerfile next.js

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

Next.js 与 Clerk Auth - 如何检测用户是否刚刚注册?

使用 Clerk Auth,我可以使用 Next.js 13 中间件实现有效的登录/注册流程。

当用户注册时,我想向数据库Users表添加一行。

中间件的问题是它在每个请求上运行,我不想调用我的数据库来检查用户是否存在,以便我可以创建记录。

Clerk 是否会返回任何可用于区分注册与正常请求的数据?

authentication oauth next.js next.js13 clerk

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

在 Windows 中优雅地终止独立的 node.js 生成的子进程

不是重复的我可以很好地终止进程,我想知道如何在进程内检测它正在被终止,并优雅地关闭。

概述:

我有一个 CLI 工具来生成和终止子 node.js 进程。演示代码包含在这三个文件中:

spawn.js-- 将生成child.js脚本,分离。为了简单起见,我将孩子的管道传输stdio到一个out.log文件

child.js-- 写入文件的简单计数器,使用该readline方法检测 Windows 中的模拟 SIGINT

kill.jsprocess.kill()--使用子进程的 PID调用 a


代码:

生成.js

'use strict';

var spawn = require('child_process').spawn;
var fs = require('fs');
var path = require('path');

var childFilePath = path.resolve(__dirname, 'child.js');

var out = fs.openSync('./out.log', 'a');
var err = fs.openSync('./out.log', 'a');

var options = {
  detached: true,
  stdio: ['ignore', out, err],
};

var child = spawn(process.execPath, [childFilePath], options); …
Run Code Online (Sandbox Code Playgroud)

windows kill command-line-interface node.js

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

针对调用不带“.then()”或不带 TypeScript 的“await”的异步函数的 Lint 警告

在 TypeScript 中,可以检查并警告开发人员是否同步调用函数async

对于那些想要减少开销并使用 Node.js v9.0+ 的人来说,如果我们有这样的东西,是否可以让任何 linter 给我们一个警告?

async function foo() {
  return;
}

var result = foo(); // warning right here because there is no await
Run Code Online (Sandbox Code Playgroud)

原因是,除非我们显式命名它fooAsync、查看实现或假设一切都是异步的,否则函数是否返回承诺/是否等待并不明显。或者也许开发人员搞砸了并且忘记写了await

只是想要一个警告来捕获开发时而不是运行时的错误。

javascript node.js async-await eslint

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

如何在 Chrome 分析/性能选项卡中阅读评估脚本时间

有人告诉我,我的脚本阻塞了客户站点上的主线程。

它被标记为<script async...>所以它不应该是一个网络块。

我运行了 Chrome 分析器,尽管在谷歌上搜索了解释,但我真的不明白我在看什么。

这是有问题的脚本的屏幕截图: 在此处输入图片说明

不明白整个蓝块的哪一部分是“线程阻塞部分”

这是关联的Bottom-Up表: 在此处输入图片说明

从第一张图像开始,“细线”从大约 500 毫秒到大约 900 毫秒,大约是 400 毫秒的时间,但在自下而上的表中,它表​​示“评估脚本”的总时间为 184.5 毫秒。

那么我可以假设脚本的“阻塞”时间应该取自自下而上的表,达到 184.5 毫秒?

javascript performance google-chrome google-chrome-devtools chrome-profile

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

有没有办法在mongoose的find()中使用变量作为字段名?

假设您有一个非常长的泛型函数要在多个模式上使用,并且每个模式对于您要查询的字段都有不同的名称(可能还有不同类型的值 - 字符串,数字等)

function foo (field, value){
    Model.find({field: value});
}

foo('idfoo', 'xx');
foo('idbar', 5);
Run Code Online (Sandbox Code Playgroud)

我试图做这样的事情作为猫鼬的概念证明,它似乎只有你使用变量值,但你不能用于字段.

这不可能吗?

javascript mongoose node.js

4
推荐指数
3
解决办法
1757
查看次数

由于 aws_s3_bucket_object 已弃用,我是否应该仅使用 aws_s3_bucket 上传文件?

页面上有一条注释aws_s3_bucket_object说它已被弃用并可以使用aws_s3_bucket

aws_s3_bucket_object 资源已弃用,并将在未来版本中删除!请改用 aws_s3_object,其中将添加新功能和修复。在配置中将 aws_s3_bucket_object 替换为 aws_s3_object 时,在下次应用时,Terraform 将重新创建该对象。如果您不想让 Terraform 重新创建对象,请使用 aws_s3_object 导入对象。

当我转到该aws_s3_bucket页面时,没有如何上传文件的示例,只有如何创建存储桶。网上的一些文章也指出使用aws_s3_bucket创建存储桶但仍然使用aws_s3_bucket_object上传文件,这仍然是正确的做法吗?

amazon-s3 amazon-web-services terraform

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

mongoose findOne()调用不保存,输出没有错误

我正在做一个简单的findOne()并将doc保存在其中,但由于某种原因它无法正常工作.我输出了对象并且控制台中的输出是正确的,但是在save()之后,我看看我的mongodb并没有保存.我不确定我是否应该设置某种选项.这是我的代码:

var1 = "data1";
var2 = "data1field1";
Model.findOne({'_id':some_id}).exec(function(err, doc) {
    if (err) return console.error(err);
    (doc.data[var1][var2][0] += 1;
    console.log(doc.data.data1);
    doc.save(function (err) {
        if(err){console.log(err);}
        console.log('success');
    });
});
Run Code Online (Sandbox Code Playgroud)

这是我的架构:

var modelSchema = new mongoose.Schema({
    'data':{
        'data1':{
            'data1field1':[{type: Number}],
            'data1field2':[{type: Number}]
        },
        'data2':{
            'data2field1':[{type: Number}],
            'data2field2':[{type: Number}]
        }
    }
});
var Model = mongoose.model('model', modelSchema);
module.exports.Model = Model;
Run Code Online (Sandbox Code Playgroud)

假设我创建了这个模式的实例,其中data.data1.data1field1是两个数字[0,0]的数组,"console.log(doc.data.data1);"的输出 将会:

{
    data1field1:[1,0],
    data1field2:[0,0] }
success
Run Code Online (Sandbox Code Playgroud)

但是保存不会发生.我是mongoose/mongodb的新手,所以我可能缺少一个简单的基本内容.

注意:我不能使用Model.update({},{$ inc {}}),因为我使用变量来选择要更改的数据对象,并且由于.update()中的文字,这是不可能的.

谢谢.

javascript find mongoose mongodb node.js

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

如何使用 knex.js 和 objection.js 在 Postgres 中查询不到 48 小时的记录?

我想使用created_at列查询年龄小于 48 小时的所有记录。

在 PostgreSQL 中,您可以执行以下操作:

SELECT * from "media" WHERE updated_at >= now() - '48 hour'::INTERVAL;

我们如何在 objection.js/knex.js 中编写它而不进入原始查询(或者可能使用一些原始查询来实现部分等式)?

我有工作逻辑:

const { raw } = require('objection');

return SomeModel.query()
  .andWhere(raw('updated_at >= now() - \'48 HOUR\'::INTERVAL'))
  .orderBy('updated_at')
  .first();
Run Code Online (Sandbox Code Playgroud)

但我想尽可能避免使用该raw功能,例如:

return SomeModel.query()
  .where('updated_at', '>=', 'i have no idea what to put here')
  .orderBy('updated_at')
  .first();
Run Code Online (Sandbox Code Playgroud)

一开始想到,既然updated_at是一个new Date().toISOString()我也许可以做一些类似的事情< new Date(new Date().getTime()-48*60*60*1000).toISOString()

但我不完全确定 Postgres 比较器将如何处理这个问题。

postgresql orm node.js knex.js objection.js

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

温斯顿在文本中保存颜色格式器,如何删除它但仍然显示颜色?

我试图创建一个winston用作日志记录框架的日志记录模块。它允许我指定颜色,如果传输为Console,则非常好,但是如果我要定义两个传输,一个Console,一个File,则实际上会将终端格式化程序字符串保存在文本中,并将其保存在文件中。

const { addColors, createLogger, format, transports } = require('winston');

const { combine, colorize, printf, timestamp } = format;

const logFormat = printf((info) => {
  return `[${info.timestamp}] ${info.level}: ${info.message}`;
});

const rawFormat = printf((info) => {
  return `[${info.timestamp}] ${info.level}: ${info.message}`;
});

const config = require('../config');

const logger = createLogger({
  level: config.DEBUG,
  format: combine(
    colorize(),
    timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    logFormat,
  ),
  transports: [
    new transports.File({
      filename: 'combined.log',
    }),
    new transports.Console({ format: combine(timestamp(), …
Run Code Online (Sandbox Code Playgroud)

javascript logging node.js express winston

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