我正在使用amqplib在node.js服务器中传输消息。我从RabbitMQ官方网站上看到了一个例子:
var amqp = require('amqplib/callback_api');
amqp.connect('amqp://localhost', function(err, conn) {
conn.createChannel(function(err, ch) {
var q = 'hello';
var msg = 'Hello World!';
ch.assertQueue(q, {durable: false});
// Note: on Node 6 Buffer.from(msg) should be used
ch.sendToQueue(q, new Buffer(msg));
console.log(" [x] Sent %s", msg);
});
setTimeout(function() { conn.close(); process.exit(0) }, 500);
});
Run Code Online (Sandbox Code Playgroud)
在这种情况下,连接将在超时功能中关闭。我认为这不是可持续的方式。但是,ch.sendToQueue没有回调函数,允许我在发送消息后关闭连接。紧密连接有什么好处?
我正在使用Joi来验证我的node.js服务器中使用hapijs框架的服务的有效负载.它曾经看起来像这样(在我的打字稿代码以及编译成javascript后):
payload: {
para1: Joi.number().required(),
para2: Joi.string()
}
Run Code Online (Sandbox Code Playgroud)
现在我想设置两个参数的默认值.如果代码是用javascript编写的,我可以这样做:
payload: {
para1: Joi.number().required().default(1),
para2: Joi.string().default("defaultstring")
}
Run Code Online (Sandbox Code Playgroud)
我在swagger中测试了它,默认值实际上变成了我设置的值.
但是,我的项目是用打字稿编写的.我做了同样的事情并编译了打字稿代码.结果javascript看起来像这样:
payload: {
para1: Joi.number().required()["default"](1),
para2: Joi.string()["default"]("defaultstring")
}
Run Code Online (Sandbox Code Playgroud)
在招摇时,不应用默认值.
这是我的问题:
["default"]("defaultstring")意思,它做什么?Joi.string().default("defaultstring")更新
根据@ rsp的帖子,问题2中的格式只是访问对象属性的不同方式.我也可以从这里得到参考.但它没有解释它们是否有任何区别.有谁有想法吗?
UPDATE2
以下是访问JS属性的两种方式之间的区别.使用括号方式似乎没有负面影响.但是,在我的情况下,默认值不会反映在swagger上.将对它进行研究.
我有node.js服务和角度客户端使用socket.io在长时间的http请求期间传输一些消息.
服务:
export const socketArray: SocketIO.Socket[] = [];
export let socketMapping: {[socketId: string]: number} = {};
const socketRegister: hapi.Plugin<any> = {
register: (server) => {
const io: SocketIO.Server = socket(server.listener);
// Whenever a session connected to socket, create a socket object and add it to socket array
io.on("connection", (socket) => {
console.log(`socket ${socket.id} connected`);
logger.info(`socket ${socket.id} connected`);
// Only put socket object into array if init message received
socket.on("init", msg => {
logger.info(`socket ${socket.id} initialized`);
socketArray.push(socket);
socketMapping[socket.id] = msg;
}); …Run Code Online (Sandbox Code Playgroud) 我的wireguard服务器和客户端配置如下:
服务器:
[Interface]
PrivateKey = <server private key>
Address = 192.168.2.4
ListenPort = 51821
[Peer]
PublicKey = <client public key>
AllowedIPs = 172.20.10.5/32
Run Code Online (Sandbox Code Playgroud)
客户:
[Interface]
PrivateKey = <client private key>
Address = 172.20.10.5
[Peer]
PublicKey = <server public key>
AllowedIPs = 192.168.2.4/32
Endpoint = <Public IP>:51821
PersistentKeepalive = 25
Run Code Online (Sandbox Code Playgroud)
当我启动它们时,我的客户端无法 ping 服务器网络中的任何机器。在浏览器中,该 IP 仍然是客户端的 Internet IP。当我wg在客户端上运行时,它显示发送了一些数据,而在传输信息中收到了 0 个数据。
我的配置有什么明显的错误吗?如果没有,常见的故障排除方法是什么?
我是Angular的新手.当我在做Heros教程时,我注意到组件构造函数参数的类型必须是依赖项.换句话说,我必须将它包含在providers数组中.
例如:
import { SomeServiceClass } from '...';
@Component({
...
})
export class MyComponent implements OnInit {
constructor(input1: SomeServiceClass) { }
ngOnInit() {
}
}
Run Code Online (Sandbox Code Playgroud)
除非我在providers数组中包含SomeServiceClass,否则此代码不会起作用.我试过了input1: string.它既不起作用!我相信它是完全有效的打字稿代码.问题必须是angular2实例化组件类的方式.
问题1:如何将组件分类实际由Angular实例化?
而且,由于我从不实例化服务类,我无法想象将哪个服务类实例传递给组件构造函数.
问题2:angular是否创建了每个组件使用的一个服务实例,或者为每个组件生成一个实例?
我是 d3 的新手。当使用 进行平移和缩放时d3v4,我注意到我们总是必须基于 来创建新比例并将d3.event.transform新比例应用于所有内容,而不是用新比例替换旧比例并再次应用旧比例。例如,这个缩放功能就可以完美运行:
function zoomFunction(){
// create new scale ojects based on event
var new_xScale = d3.event.transform.rescaleX(xAxisScale)
var new_yScale = d3.event.transform.rescaleY(yAxisScale)
console.log(d3.event.transform)
// update axes
gX.call(xAxis.scale(new_xScale));
gY.call(yAxis.scale(new_yScale));
// update circle
circles.attr("transform", d3.event.transform)
};
Run Code Online (Sandbox Code Playgroud)
这个缩放功能搞砸了一切:
function zoomFunction(){
// create new scale ojects based on event
var new_xScale = d3.event.transform.rescaleX(xAxisScale)
var new_yScale = d3.event.transform.rescaleY(yAxisScale)
xAxisScale = new_xScale;
yAxisScale = new_yScale;
console.log(d3.event.transform)
// update axes
gX.call(xAxis.scale(xAxisScale));
gY.call(yAxis.scale(yAxisScale));
// update circle
circles.attr("transform", d3.event.transform)
};
Run Code Online (Sandbox Code Playgroud)
完整的示例在这里:https://bl.ocks.org/rutgerhofste/5bd5b06f7817f0ff3ba1daa64dee629d
我想使用新比例代替旧比例的原因是,就我而言,svg 的很多部分都与比例相关。如果我只是改变旧的比例,那些绑定的事件将完美地工作。我不想回收 …
根据MDN,
异步函数声明定义了一个异步函数
我理解它,因为该函数将被视为异步过程,就像setTimeout某个数据库请求一样。例如,在下面的示例中,该过程应在数字之间的某个位置输出“ main”。
let func2 = async () => {
for (let i = 0; i < 51; i ++) {
console.log(i);
}
}
(async () => {
func2();
console.log("main");
})()
Run Code Online (Sandbox Code Playgroud)
但是,就像整个过程是同步的一样,“ main”总是在最后被控制台。我理解错了什么?
如果同步代码仍然是同步的,那么目的是async什么?只允许await在其内部提供一些幻想的方法来返回Promise?
我们有一个Angular 6应用程序。它在Nginx上提供。SSL已启用。
当我们部署新代码时,大多数新功能都可以正常工作,但不能进行某些更改。例如,如果前端开发人员更新并部署了服务连接,则用户必须打开隐身窗口或清除缓存以查看新功能。
哪些类型的更改不会自动更新?他们为什么与众不同?
避免该问题的常见解决方案是什么?
javascript ×6
node.js ×4
angular ×3
typescript ×2
async-await ×1
constructor ×1
d3.js ×1
deployment ×1
hapijs ×1
joi ×1
nginx ×1
rabbitmq ×1
socket.io ×1
websocket ×1
wireguard ×1