我的导航栏有这个代码:
<nav>
<a [routerLink]="['/']" [routerLinkActive]="['nav-active']">HOME</a>
<a [routerLink]="['/about']" [routerLinkActive]="['nav-active']">ABOUT</a>
<a [routerLink]="['/records']" [routerLinkActive]="['nav-active']">RECORDS</a>
</nav>
Run Code Online (Sandbox Code Playgroud)
问题是HOME导航点始终获取类,因为/似乎始终处于活动状态.用一个小而简单的解决方案可以避免这种情况吗?
谢谢您的帮助
编辑:
这是现在的解决方案:
[routerLinkActiveOptions] ="{exact:true}"
我想尝试转换这样的时间戳:
2015-06-27T09:34:22+00:00
Run Code Online (Sandbox Code Playgroud)
到格式的时间所以它会说像9个月前1天2小时30分2秒.
类似的东西.
我使用time.Parse并time.Since达到这个目的:
6915h7m47.6901559s
Run Code Online (Sandbox Code Playgroud)
但是我如何从那里转换?这样的事情就是我想的:
for hours > 24 {
days++
hours -= 24
}
Run Code Online (Sandbox Code Playgroud)
但问题是,这个月不准确,因为几个月可能有28天,30天和31天.
有没有更好的方法来实现我想要的?
我正在采取Angular 2和角度的第一步,我想知道如何设置登陆页面.
我的目标是每次用户在本地存储或cookie中没有令牌时显示登录页面.
我的app.component.ts看起来像这样
import {Component} from 'angular2/core';
import {ROUTER_DIRECTIVES, RouteConfig} from 'angular2/router';
import {NavbarComponent} from './navbar.component';
import {LoaderComponent} from './loader.component';
import {NameListService} from '../shared/index';
import {HomeComponent} from '../+home/index';
import {AboutComponent} from '../+about/index';
@Component({
selector: 'g-app',
viewProviders: [NameListService],
templateUrl: 'app/components/app.component.html',
directives: [ROUTER_DIRECTIVES, NavbarComponent, LoaderComponent]
})
@RouteConfig([
{
path: '/',
name: 'Home',
component: HomeComponent
},
{
path: '/about',
name: 'About',
component: AboutComponent
}
])
export class AppComponent {
}
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,/ home和/ about也是组件.现在我想要一个无法访问导航栏的单独页面.如果用户未登录,则用户将始终登陆.
如果有人可以帮助我开始或至少指向一个好的方向,那将是非常棒的,也许可以指向一个好的角度2教程.
这是我的应用程序基于https://github.com/mgechev/angular2-seed的样板
我正在尝试在我的angular 2应用程序中使用socket.io客户端并安装它和打字
我只是从'socket.io-client'导入;
但不知怎的,我从中得到了很多错误:
我可以在我的index.html中使用lib,如果我从cdn加载脚本并将init代码放在<script>标签中但我不能在我的实际angular 2应用程序中使用它.
我在这做错了什么?
这是我的样板:https://github.com/mgechev/angular2-seed
socket.io的例子似乎已经过时了,这就是我避免它们的原因.
这就是我正在做的并且已经得到了这些错误:
import * as io from 'socket.io-client';
[...]
var socket = io('127.0.0.1');
Run Code Online (Sandbox Code Playgroud)
所以这个问题似乎与SystemJS有关.这个https://github.com/mgechev/angular2-seed/wiki/Add-external-dependency建议我可以添加socket.io-client,它应该自动添加所有依赖项,但这似乎并非如此.
我已经尝试了完整的例子,但这也无济于事.
我已经考虑了很多,但无法想出一个我很满意的解决方案.
基本上这就是问题:记录100k + Chats(有些慢,有些更快)进入cassandra.因此保存userId,channelId,timestamp和消息.
Cassandra已经支持水平扩展,我在这里没有问题.
现在,我读取这些聊天的软件通过TCP(IRC)完成.对于顶级1k通道,通常会有300条消息/秒,而单个IRC连接无法处理我的实验.
我现在想要构建的是记录器的多个实例(使用Docker/Kubernetes)并在它们之间共享负载.理想情况下,如果我有4个工人和1k个聊天(例如).他们每个人都会加入至少250个频道.我说至少是因为我想要可选的冗余,所以我可以在同一个聊天中有2个记录器,以确保没有消息丢失.重复项没有问题,因为所有消息都有唯一的ID.
现在,我将如何最好地动态分享工人之间加入的当前渠道.我想避免拥有主人或控制点.还应该很容易添加更多的工人,然后减少其他工人的负担.
有关这种行为的好文章吗?也许已经定义了好的概念或协议?就像我说的,我想避免另一个中央控制点,所以没有rabbitmq,redis或其他什么.
编辑:我已经研究过像Raft Consensus Algorithm这样的东西了,但是我认为这没有意义,因为我不希望我的客户就共享状态达成一致,而是将它们之间的状态"平等地"分开.
parallel-processing tcp distributed-computing docker kubernetes
我正在使用名为echo(https://github.com/labstack/echo)的轻型框架Web框架,我正在尝试使用它构建一个非常简单的API.
这是我的一条路线
e.Get("/v1/:channel/:username", getData)
Run Code Online (Sandbox Code Playgroud)
这是getData函数,它从mysql数据库中执行一个非常简单的SELECT
func getData(c echo.Context) error {
quote := new(Quote)
for rows.Next() {
var username string
var message string
err = rows.Scan(&username, &message)
checkErr(err)
quote.username = username
quote.message = message
}
log.Println(quote)
defer rows.Close()
return c.JSON(http.StatusOK, quote)
}
Run Code Online (Sandbox Code Playgroud)
我还有返回值的这个基本结构
type Quote struct {
username string
message string
}
Run Code Online (Sandbox Code Playgroud)
可悲的是,我现在无法弄清楚如何返回JSON.当我尝试这个代码时,来自服务器的响应总是只是{}
我尝试返回c.String工作正常并输出响应但我想返回一个JSON.
我按照这个例子,并没有真正看到这里的问题. https://github.com/labstack/echox/blob/master/recipe/crud/main.go
知道我做错了什么吗?
如果我的猜测正确的话,我可能会遇到结构问题,可能还会遇到指针问题。
该结构具有一些字段和一个包含切片的字段:
type Bot struct {
// ...
connlist []Connection
}
Run Code Online (Sandbox Code Playgroud)
这Connection看起来是这样的:
type Connection struct {
conn net.Conn
messages int32
channels []string
joins int32
connactive bool
}
Run Code Online (Sandbox Code Playgroud)
我的问题是将的值更改connactive为true。
Bot 有一个监听连接的方法:
func (bot *Bot) ListenToConnection(connection Connection) {
reader := bufio.NewReader(connection.conn)
tp := textproto.NewReader(reader)
for {
line, err := tp.ReadLine()
if err != nil {
log.Printf("Error reading from chat connection: %s", err)
break // break loop on errors
}
if strings.Contains(line, "tmi.twitch.tv 001") {
connection.activateConn()
} …Run Code Online (Sandbox Code Playgroud) 我很擅长使用PHPUnit测试从PHP的背景进行测试.
在PHP中,我们非常热切地鼓励你需要100%的覆盖率.在Go中,我读过的关于测试的大多数东西似乎都很小,没有引发错误的东西.
比如我的小程序:
func main() {
config = readConfig("config.json")
}
func readConfig(path string) Config {
var cfg Config
file, err := ioutil.ReadFile(path)
if err != nil {
log.Fatal(err)
}
err = json.Unmarshal(file, &cfg)
if err != nil {
log.Fatal(err)
}
return cfg
}
func TestCanReadConfig(t *testing.T) {
cfg := readConfig("test_data/config.json")
if cfg.Broker_pass != "test" || cfg.Broker_port != "3333" {
t.Error("invalid config")
}
}
Run Code Online (Sandbox Code Playgroud)
现在在我的例子中我会遇到覆盖问题,因为单元测试中根本没有涉及main()(应该怎么做?)
并且根本没有涵盖2 log.Fatal().
我的问题是如何在go中完全编写我的测试?我是否以不太严格的方式进行测试而不是测试每种可能的场景,或者我可以使用我可以使用php进行注释,
@expectedException \InvalidArgumentException
还是应该测试主要功能?如果没有,我可以以某种方式从覆盖工具中忽略它吗?我应该考虑一个测试框架吗?大多数测试教程都很好但很短,只引入了简单的测试.
我一直在尝试在最近几个小时内解决这个问题,但是我陷入了困境。
我有一个非常简单的Dockerfile,看起来像这样:
FROM alpine:3.6
COPY gempbotgo /
COPY configs /configs
CMD ["/gempbotgo"]
EXPOSE 8025
Run Code Online (Sandbox Code Playgroud)
gempbotgo只是运行网络服务器和其他一些东西的go二进制文件。该网络服务器在8025上运行,并且应该向世界问好。
我的问题是暴露端口。我这样运行容器(构建后)
docker run --rm -it -p 8025:8025 asd
Run Code Online (Sandbox Code Playgroud)
一切似乎都很好,但是当我尝试在浏览器中打开127.0.0.1:8025或尝试wget时,我只是得到一个空响应。Chrome:ERR_EMPTY_RESPONSE
Windows 10系统上的防火墙使用了该端口,但不受该端口的限制。仅在我的“ Windows上的Ubuntu上的Bash”终端上运行不带容器的go二进制文件,然后浏览至127.0.0.1:8025即可顺利进行。其他地址返回了“ ERR_CONNECTION_REFUSED”,例如127.0.0.1:8030,因此该端口上肯定有活动的东西。
然后,我带着
docker exec -it e1cc6daae4cf /bin/sh
Run Code Online (Sandbox Code Playgroud)
并在那里用wget进行检查。也没有问题。使用“ Hello World”下载index.html文件
有什么想法为什么码头工人不发送任何数据?我也用docker-compose运行了我的容器,但没有任何区别。
我还在外部托管的VPS上运行了容器。那里同样的问题...(Debian)
我的代码:(注意Makefile) https://github.com/gempir/gempbotgo/tree/docker
编辑:
在收到一些评论后,我将Dockerfile更改为多阶段构建。现在是我的Dockerfile:
FROM golang:latest
WORKDIR /go/src/github.com/gempir/gempbotgo
RUN go get github.com/gempir/go-twitch-irc \
&& go get github.com/stretchr/testify/assert \
&& go get github.com/labstack/echo \
&& go get github.com/op/go-logging
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app . …Run Code Online (Sandbox Code Playgroud) go ×4
angular ×3
docker ×2
api ×1
bash ×1
duration ×1
go-echo ×1
javascript ×1
json ×1
kubernetes ×1
pointers ×1
slice ×1
socket.io ×1
struct ×1
tcp ×1
time ×1
typescript ×1
unit-testing ×1
windows ×1