小编Jes*_*pez的帖子

使用nodesource安装脚本在docker容器上安装nodejs时出现弃用警告

我曾经使用 Dockerfile 中的以下内容在基于 Debian 的容器上安装 Nodejs:

RUN apt-get update -yq && apt-get upgrade -yq && apt-get install -yq curl git nano
RUN curl -sL https://deb.nodesource.com/setup_18.x | bash - 
RUN apt-get install nodejs -y 
Run Code Online (Sandbox Code Playgroud)

但我最近开始收到以下消息:

RUN apt-get update -yq && apt-get upgrade -yq && apt-get install -yq curl git nano
RUN curl -sL https://deb.nodesource.com/setup_18.x | bash - 
RUN apt-get install nodejs -y 
Run Code Online (Sandbox Code Playgroud)

我如何解决它?

node.js docker deprecation-warning dockerfile

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

CLR在SQL Server 2017上的严格安全性

MSDN对这篇文章说:

CLR使用.NET Framework中的代码访问安全性(CAS),不再支持它作为安全边界.使用PERMISSION_SET = SAFE创建的CLR程序集可能能够访问外部系统资源,调用非托管代码以及获取sysadmin权限.从SQL Server 2017开始,引入了名为clr strict security的sp_configure选项,以增强CLR程序集的安全性.默认情况下启用clr严格安全性,并将SAFE和EXTERNAL_ACCESS程序集视为标记为UNSAFE.可以禁用clr strict security选项以实现向后兼容性,但不建议这样做.Microsoft建议所有程序集都由证书或非对称密钥签名,并且相应的登录名已在master数据库中被授予UNSAFE ASSEMBLY权限.

如何创建CLR程序集PERMISSION_SET = SAFE可以访问外部系统资源,调用非托管代码以及获取sysadmin权限?

为什么不再支持CAS作为安全边界?

据我所知,CLR组件不再安全,这是非常不幸的.

.net sql-server sqlclr code-access-security sql-server-2017

14
推荐指数
2
解决办法
8660
查看次数

ng生成组件不创建ngOnInit和构造函数

我正在关注英雄的 Angular 之旅,当我使用“ng生成组件英雄”生成“英雄”组件时,这是我的 component.ts 文件:

import { Component } from '@angular/core';

@Component({
  selector: 'app-heroes',
  templateUrl: './heroes.component.html',
  styleUrls: ['./heroes.component.css']
})
export class HeroesComponent {

}
Run Code Online (Sandbox Code Playgroud)

但教程说我应该得到如下所示的东西:

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-heroes',
  templateUrl: './heroes.component.html',
  styleUrls: ['./heroes.component.css']
})
export class HeroesComponent implements OnInit {

  constructor() { }

  ngOnInit(): void {
  }

}
Run Code Online (Sandbox Code Playgroud)

我期望获得构造函数和 ngOnInit 函数,并自动导入 OnInit 。这是我的版本(如果有帮助的话)

angular

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

从任意线程调用StateHasChanged()是否安全?

StateHasChanged()从任意线程调用安全吗?

让我给你一些背景。想象一下您拥有的服务器端Blazor / Razor组件应用程序:

  • 单例服务NewsProvider,它BreakingNews从任意线程引发事件。
  • 一个组件News.cshtml是可以获得的服务注入和订阅BreakingNews事件。引发事件时,组件将更新模型并调用StateHashChanged()

NewsProvider.cs

using System;
using System.Threading;

namespace BlazorServer.App
{
    public class BreakingNewsEventArgs: EventArgs
    {
        public readonly string News;

        public BreakingNewsEventArgs(string news)
        {
            this.News = news;
        }
    }

    public interface INewsProvider
    {
        event EventHandler<BreakingNewsEventArgs> BreakingNews;
    }

    public class NewsProvider : INewsProvider, IDisposable
    {

        private int n = 0;

        public event EventHandler<BreakingNewsEventArgs> BreakingNews;
        private Timer timer;

        public NewsProvider()
        {
            timer = new Timer(BroadCastBreakingNews, null, 10, 2000);

        } …
Run Code Online (Sandbox Code Playgroud)

c# blazor blazor-server-side

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

如何预加载 svg 精灵?

我有一个像这样的 svg 精灵文件icons.svg:

<?xml version="1.0" encoding="utf-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">

  <symbol id="twitter" viewBox="0 0 512 512">
    <path d="..some path data here..."></path>
  </symbol>

  <symbol id="facebook" viewBox="0 0 512 512">
    <path d="..some path data here..."></path>
  </symbol>
</svg>
Run Code Online (Sandbox Code Playgroud)

我从网页正文中引用的:

<svg>
    <use xlink:href="/images/common/icons.svg#twitter"></use>
</svg>
Run Code Online (Sandbox Code Playgroud)

我想预加载icons.svg 以避免闪烁。怎么做?

我尝试将链接 rel 预加载添加到头部:

<head>
    <link rel="preload" href="/images/common/icons.svg" as="image" type="image/svg+xml"/>
</head>
Run Code Online (Sandbox Code Playgroud)

但它不起作用。我在 Chrome 开发人员工具上看到icons.svg 加载了两次,以及以下警告:

资源http://localhost:57143/images/common/icons.svg是使用链接预加载预加载的,但在窗口加载事件的几秒钟内未使用。请确保它具有适当的as 值并且是有意预加载的

.

html svg sprite preload

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

在Windows上编码gulp的问题

我在使用gulp版本3.8.11 处理的Visual Studio 2013 wep应用程序项目中有几个源文件.这些文件是Unicode (UTF-8 with signature) - Codepage 65001编码的文本文件.处理后,它们显示为Windows 1252编码的文本文件.

例如,给定以下UTF-8 encoded src/hello.html文件:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Hello</title>
</head>
<body>
    <h1>Hello, my name is Jesús López</h1>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这是它在浏览器上的外观:

在此输入图像描述

使用以下内容gulpfile.js:

var gulp = require('gulp');

gulp.task('build', function () {
    gulp.src('src/hello.html')
        .pipe(gulp.dest('dist'));
});
Run Code Online (Sandbox Code Playgroud)

gulp build命令行上执行后,这就是它在浏览器上的显示方式:

在此输入图像描述

如何解决此编码问题?请帮忙.

windows character-encoding visual-studio web gulp

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

什么是“ Blazor电路”?

文档中多次提到“Blazor 电路”术语,但我找不到该术语的定义。我想这就像与用户会话相关的某种状态。

请问您能否提供 Blazor 电路真正含义的更准确定义?

blazor-server-side

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

确保事件最终发布到消息排队系统的最佳方法

请假设您有类似以下的方法:

public void PlaceOrder(Order order)
{
     this.SaveOrderToDataBase(order);
     this.bus.Publish(new OrderPlaced(Order));    
}
Run Code Online (Sandbox Code Playgroud)

将订单保存到数据库后,会将事件发布到消息排队系统,因此同一台计算机或其他计算机上的其他子系统可以处理该事件.

但是,如果this.bus.Publish(new OrderPlaced(Order))呼叫失败会发生什么?或者在将订单保存到数据库后机器崩溃了?事件未发布,其他子系统无法处理.这是无法接受的.如果发生这种情况,我需要确保最终发布该事件.

我可以使用哪些可接受的策略?哪个最好?

注意:我不想使用分布式事务.

编辑:

Paul Sasik非常接近,我认为我可以达到100%.这就是我的想法:

首先在数据库中创建一个表,如下所示:

CREATE TABLE Events (EventId int PRIMARY KEY)
Run Code Online (Sandbox Code Playgroud)

您可能希望使用guids而不是int,或者您可以使用序列或身份.

然后执行以下伪代码:

open transaction
save order and event via A SINGLE transaction
in case of failure, report error and return
place order in message queue
in case of failure, report error, roll back transaction and return
commit transaction
Run Code Online (Sandbox Code Playgroud)

所有活动必须包括EventId.当事件订阅者收到事件时,他们首先检查数据库中是否存在EventId.

通过这种方式,您可以获得100%的可靠性,而不仅仅是99.999%

c# events message-queue eventual-consistency rabbitmq

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

如何在语句级触发器中获取受影响的基表行数

我有这些表:

CREATE EXTENSION citext;
CREATE EXTENSION "uuid-ossp";

CREATE TABLE cities
(
    city_id serial PRIMARY KEY,
    city_name citext NOT NULL UNIQUE
);

INSERT INTO cities(city_name) VALUES
('New York'), ('Paris'), ('Madrid');

CREATE TABLE etags
(
    etag_name varchar(128) PRIMARY KEY,
    etag_value uuid
);

INSERT INTO etags(etag_name, etag_value)
VALUES ('cities', uuid_generate_v4());
Run Code Online (Sandbox Code Playgroud)

我想在城市表更改时更新城市etag.如果插入,更新或删除语句没有影响行,我想避免更改城市etag,所以我编写了以下语句级别触发器:

CREATE OR REPLACE FUNCTION update_etag()
  RETURNS trigger AS
$BODY$
    DECLARE 
        record_count integer;
        vetag_name varchar(128);
    BEGIN
    GET DIAGNOSTICS record_count = ROW_COUNT;
    vetag_name := TG_ARGV[0];
    RAISE NOTICE 'affected %:%', vetag_name, record_count;
    IF record_count = …
Run Code Online (Sandbox Code Playgroud)

postgresql triggers

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

为什么在 TypeScript 中禁止实现具有非公共成员的类?

有以下课程:

class Trait {
    publicMethod() {
        this.privateMethod();
        // do something more
    }

    private privateMethod() {
        // do something usefull
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试通过以下方式实现它:

class MyClass implements Trait {
    publicMethod() {}
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

MyClass 错误地实现了接口 Trait。类型“MyClass”中缺少属性“privateMethod”

如果我尝试通过以下方式实现它:

class MyClass implements Trait {
    publicMethod() {}

    private privateMethod() {}
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

MyClass 错误地实现了接口 Trait。类型具有私有属性“privateMethod”的单独声明

如果我尝试以下操作:

class MyClass implements Trait {
    publicMethod() {}

    public privateMethod() {}
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:

MyClass 错误地实现了接口 Trait。属性“privateMethod”在“Trait”类型中是私有的,但在“MyClass”类型中不是私有的

受保护的方法以及私有和受保护的属性也会发生同样的情况。因此,为了能够实现该类,该类的所有成员都必须是公共的。

为什么在 TypeScript 中禁止实现具有非公共成员的类?

编辑:好的,实现将类视为接口,并且因为接口不能具有私有成员,所以您不能实现具有非公共成员的类。但为什么不忽略非公共成员呢?

提出这个问题是因为我想应用 mixin 来重用代码。另一种选择是组合,但是有一个使用 mixin 和非公共成员的解决方案。

这是解决方案:

function applyMixins(derivedCtor: any, …
Run Code Online (Sandbox Code Playgroud)

typescript

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