有没有其他方法可以在Joi验证模式中为关键的期望正则表达式模式设置特定值?
我的示例架构:
const schema = joi.object().keys({
query: joi.object().keys({
// allow only apple and banana
id: joi.string().regex(/^(apple|banana)$/).required(),
}).required(),
})
Run Code Online (Sandbox Code Playgroud) 我正在开发我的第一个 NestJS 应用程序,它在app.module.ts.
但是根据我们的要求,我不得不从环境文件中选择数据库配置值。为此,我遵循了 nestjs 文档网站上的配置文档 - https://docs.nestjs.com/techniques/configuration
但问题是我需要在同一个文件中使用 .env 变量进行数据库连接,这是失败的。
这是我运行良好的原始代码:
@Module({
imports: [
MongooseModule.forRoot(`mongodb+srv://myusername:mypassword@myhost.net?retryWrites=true&w=majority&db=dbname`, { useNewUrlParser: true, dbName: 'dbname' }),
ProductModule,
CategoryModule,
],
controllers: [
AppController,
HealthCheckController,
],
providers: [AppService, CustomLogger],
})
Run Code Online (Sandbox Code Playgroud)
现在,我想从.ENV文件,这是喜欢挑选那些DB值local.env,dev.env取决于环境等。现在,我的这段代码不起作用:
@Module({
imports: [
ConfigModule.forRoot({ envFilePath: `${process.env.NODE_ENV}.env` }),
MongooseModule.forRoot(`mongodb+srv://${ConfigModule.get('DB_USER')}:${ConfigModule.get('DB_PASS')}@myhost.net?retryWrites=true&w=majority&db=dbname`, { useNewUrlParser: true, dbName: 'dbname' }),
ProductModule,
CategoryModule,
],
controllers: [
AppController,
HealthCheckController,
],
providers: [AppService, CustomLogger],
})
Run Code Online (Sandbox Code Playgroud) 我使用bx滑块在我的nodejs网站上运行滑块.这是我的代码:
$(document).ready(function(){
$(".bxslider").bxSlider({
minSlides: 1,
maxSlides: 40,
slideWidth: 300,
slideMargin: 40,
moveSlides: 1
});
});//document ready
Run Code Online (Sandbox Code Playgroud)
由于滑块需要100%流体宽度,我设置maxSlides为足够大的数字(此处为40).这使滑块以流动的方式扩展到整个宽度.但现在的问题是,由于滑块宽度是流动的,在某些宽度处,最右边的可见滑块仅部分显示.我想要它显示这个完整的幻灯片,或者如果它在当前视口中不完全可见则保留它.
我有一个快速应用程序,我在终端中使用以下命令启动它以启用其中的调试日志:
DEBUG=custom:* npm start (on Ubuntu)
SET DEBUG=custom:* & npm start (on Windows)
Run Code Online (Sandbox Code Playgroud)
在生产服务器上,我使用以下命令通过 PM2 启动应用程序:
pm2 start bin/www -i 0
Run Code Online (Sandbox Code Playgroud)
但这不会debug在我的代码中启用日志,因此调试语句不会添加到日志中,仅console.error()添加到日志文件中。DEBUG=custom:*使用 PM2 启动我的应用程序时如何传递该选项?
我需要对用 NodeJS 编写的其余 api 进行单元测试。为此,我需要使用supertest npm 包。我正在按照这篇教程文章来实现单元测试功能。
现在,在本文中提到它mocha已经包含在supertest其自身中,因此无需单独安装它。所以,我只supertest使用 -进行安装npm install --save-dev supertest。
但是,当我在我的package.json-中添加这一行"test": "mocha"并运行时npm test,它会给出错误消息'mocha' is not recognized as an internal or external command。我需要运行npm install --save-dev mocha才能使其成功运行。但为什么我需要mocha单独包含,如果这就是它应该如何运行,为什么本文或 npm 主页上没有提到它supertest?
我正在使用 Jest 来测试我的 rest API。我的大多数 API 端点需要超过 5 秒才能返回,因此我需要增加 Jest 中指定的默认超时 5000 毫秒。
我有 2 个测试文件,假设: foo.test.js bar.test.js
现在,我可以通过以下两种方式摆脱超时错误:
test或it方法的第三个参数。这工作正常,但我需要更新所有现有的测试用例。jest.setTimeout(20000);在我的每个测试文件的顶部添加。这也很好用。但是,它仍然需要我更新所有现有的测试文件。我发现我可以改为jest.setTimeout(20000);在单独的文件中指定,并setupFiles在 package.json 中的 jest 配置选项中指向那个。我这样做了,但是超过 5000 毫秒的超时错误又开始出现了。我的 setupFile 被正确加载,我通过添加一些console.log语句来检查它。但它似乎jest.setTimeout(20000)对测试用例没有任何影响。
我是新手,<canvas>在数学方面很糟糕。我正在使用此函数在画布上绘制一个简单的等边三角形,该函数已从其他人那里借来了代码(不要讨厌我):
drawTriangle(PosX, PosY, SideLength, Orientation) {
context.beginPath();
var sides = 3;
var a = ((Math.PI * 2) / sides);
context.moveTo(PosX + SideLength, PosY);
for (var i = 1; i < sides + 1; i++) {
context.lineTo(PosX + SideLength * Math.cos(a*i), PosY + SideLength * Math.sin(a*i));
}
context.closePath();
return true;
}
Run Code Online (Sandbox Code Playgroud)
该函数仅知道三角形的中心坐标和指向三角形的方向。
当前,它成功绘制了三角形,但“指向”东方。
如何使用Orientation参数(度)旋转三角形,而不像其他答案所示旋转整个画布?
出于某种原因,当我查看chrome开发者工具网络时,我不断发现" http://127.0.0.1:3000/socket.io/socket.io.js"404.我花了一个多小时试图理解为什么这不起作用,因为它之前工作正常,我不认为我改变了什么.
服务器:
var express = require('express'),
session = require('express-session');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var MongoStore = require('connect-mongo')(session);
var sessionMiddleware = session({
resave: false,
saveUninitialized: false,
secret: 'secret',
store: new MongoStore({url: "mongodb://localhost:27017/database"})
});
app.use(sessionMiddleware);
io.use(sessionMiddleware, function(socket, next) {
sessionMiddleware(socket.request, socket.request.res, next);
});
io.sockets.on('connection', function (socket) {
console.log("Socket connected");
});
app.set('view engine', 'pug');
app.use(express.static(__dirname + '/public'));
app.get('/', function(req, res) {
res.render('index');
});
app.listen(3000);
console.log('listening');
Run Code Online (Sandbox Code Playgroud)
帕格档案:
html
head
script(src="http://127.0.0.1:3000/socket.io/socket.io.js")
script(type='text/javascript', src='../javascripts/chat.js')
body
Run Code Online (Sandbox Code Playgroud)
客户端javascript: …
null + 1 = 1
undefined + 1 = NaN
我无法理解这背后的逻辑是什么.两者都不应该返回相同的结果吗?
在我的项目的代码优化期间,我用替换了所有varkeyword 实例,let因为我认为没有特殊用途var。我在所有文件中都执行了“查找并替换”操作。
在某些自定义模块中,我使用了以下语句:
var exports = module.exports = {};
Run Code Online (Sandbox Code Playgroud)
效果很好。
现在,将其替换为后let,它变为:
let exports = module.exports = {};
Run Code Online (Sandbox Code Playgroud)
现在无法正常工作并出现错误
语法错误:标识符'exports'已经被声明
尽管我可以使用var并避免这个问题,但我仍然想知道背后的原因是什么。
编辑:我没有let exports = <something>;在同一模块文件中的任何地方使用过。所以这是我声明exports变量的唯一语句。