小编Ric*_*her的帖子

任何方式使用html.Parse而不添加节点来构建"格式良好的树"?

package main

import (
    "bytes"
    "code.google.com/p/go.net/html"
    "fmt"
    "log"
    "strings"
)

func main() {
    s := "Blah. <b>Blah.</b> Blah."
    n, err := html.Parse(strings.NewReader(s))
    if err != nil {
        log.Fatalf("Parse error: %s", err)
    }
    var buf bytes.Buffer
    if err := html.Render(&buf, n); err != nil {
        log.Fatalf("Render error: %s", err)
    }
    fmt.Println(buf.String())
}
Run Code Online (Sandbox Code Playgroud)

输出:

<html><head></head><body>Blah. <b>Blah.</b> Blah.</body></html>
Run Code Online (Sandbox Code Playgroud)

有没有办法阻止html.Parse从制作出文档片段(即避免添加<html>,<body>等等)?我知道html.ParseFragment但它似乎表现出相同的行为.

您可以通过使用父元素包装要解析的文本来解决它,例如,<span>然后执行以下操作:

n = n.FirstChild.LastChild.FirstChild
Run Code Online (Sandbox Code Playgroud)

但至少可以说,这似乎很糟糕.

理想情况下,我想:接受输入,操作或删除其中的节点,并将结果写回字符串,即使结果是不完整的文档.

go

7
推荐指数
2
解决办法
1768
查看次数

使用MongoDB的本机ES6承诺

我知道可以使用外部库来宣传 Mongo的Node驱动程序.我很想知道是否可以使用ES6承诺MongoClient.connect,所以我尝试了这个(使用Babel 5.8.23进行转换):

import MongoClient from 'mongodb';

function DbConnection({
  host = 'localhost',
  port = 27017,
  database = 'foo'
}) {
  return new Promise((resolve, reject) => {
    MongoClient.connect(`mongodb://${host}:${port}/${database}`, 
    (err, db) => {
      err ? reject(err) : resolve(db);
    });
  });
}

DbConnection({}).then(
  db => {
    let cursor = db.collection('bar').find();
    console.log(cursor.count());
  },
  err => {
    console.log(err);
  }
);
Run Code Online (Sandbox Code Playgroud)

输出是{Promise <pending>}.与游标有关的任何事情似乎都会产生类似的结果.有没有办法解决这个问题,还是我完全咆哮错误的树?

编辑:节点版本4.1.0.

javascript mongodb node.js es6-promise babeljs

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

包含Node.JS(vue)的文件

所以我想知道如何包含另一个JavaScript文件.很像PHP的include函数/关键字.我不是在寻找这个export功能,因为它只允许你使用其他文件中的变量.

我正在使用vue init webpack my-project.

这是我基本上拥有的(Vue):

mounted () {
    socket = io("http://localhost:8081")
    socket.connect()

    // ensure server has actually put us in a room
    socket.on("find game", () => {
        this.gameSearch = "finding"
    })
    ...
}
Run Code Online (Sandbox Code Playgroud)

所以基本上我有一大堆socket.on我想进入另一个文件.我想知道如何能够将它们包含在原样中以便它们可以像代码已经插入那样工作(就像PHP一样include)


它最终会是什么样子:

mounted () {
    <socket.js file>
}
Run Code Online (Sandbox Code Playgroud)

socket.js

socket = io("http://localhost:8081")
socket.connect()

// ensure server has actually put us in a room
socket.on("find game", () => {
    this.gameSearch = "finding"
})
...
Run Code Online (Sandbox Code Playgroud)

javascript node.js vue.js vuejs2

6
推荐指数
2
解决办法
356
查看次数

公共存储桶中的公共 S3 对象

我一直在尝试使用 Terraform 重新创建现有基础设施,所需的服务之一是 S3 存储桶,其中应包含可公开访问的图像。

这是存储桶的 Terraform 代码:

resource "aws_s3_bucket" "foo_icons" {

  bucket = join("-", [local.prefix, "foo", "icons"])
  tags = {
    Name        = join("-", [local.prefix, "foo", "icons"])
    Environment = var.environment
  }
}


resource "aws_s3_bucket_acl" "icons_bucket_acl" {
  bucket = aws_s3_bucket.foo_icons.id
  acl    = "public-read"
}

Run Code Online (Sandbox Code Playgroud)

存储桶的填充方式如下:

resource "aws_s3_object" "icon_repository_files" {
  for_each = fileset("../files/icon-repository/", "**")
  bucket = aws_s3_bucket.foo_icons.id
  key = each.value
  source = "../files/icon-repository/${each.value}"
  etag = filemd5("../files/icon-repository/${each.value}")
}
Run Code Online (Sandbox Code Playgroud)

我在控制台上看到的结果是,该存储桶实际上是可公开访问的,但根据显示的 ACL,该存储桶中的每个对象都不是公开的。我也无法通过显示的 url 访问 S3 对象:这会导致访问被拒绝。

在 Terraform 中创建包含可公开访问的对象的存储桶的最佳方法是什么?我读到 ACL 不再“现代”,所以如果有更好的方法来实现这一点,我会很高兴听到。

acl amazon-s3 terraform

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

按Enter键时,onClick不会仅使用一个输入触发

我在Internet Explorer 7中遇到问题.

当我有一个包含两个或更多 的表单input[type=text]并按Enter键时,事件按以下顺序发生:

  1. 提交按钮(onClick)
  2. 形式(onSubmit)

示例代码:

<form onSubmit="{alert('form::onSubmit'); return false;}">
    <input type="text">
    <input type="text">
    <input type="submit" onClick="{alert('button::onClick');}">
</form>
Run Code Online (Sandbox Code Playgroud)

如果我只有一个 input[type=text]而且我按下输入提交按钮onClick事件不会触发.示例代码:

<form onSubmit="{alert('form::onSubmit'); return false;}">
    <input type="text">
    <input type="submit" onClick="{alert('button::onClick');}">
</form>
Run Code Online (Sandbox Code Playgroud)

javascript events internet-explorer internet-explorer-7

5
推荐指数
2
解决办法
1099
查看次数

处理MySQL CASE语句中的空集

MySQL服务器版本5.0.45.考虑以下:

( SELECT CASE 
    WHEN t.group_id = 12 THEN 'yes' 
    ELSE 'no' 
    END
    FROM sample_table t
    WHERE t.user_id = 2
    AND t.group_id = 12 ) as foo
Run Code Online (Sandbox Code Playgroud)

这个较大语句的子查询符合我的预期,大部分时间都会产生"是"或"否"字符串值.这不是理想的,但这就是你在别人的代码上工作所得到的!

但是,有时select可以合法地返回一个空集,在这种情况下foo设置为NULL.这实际上并没有破坏应用程序,但它令人恼火.有没有办法可以保证foo总是'yes'或'no',即使表中没有匹配的行?

mysql null case

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

Knex迁移种子完成时出现外键错误

我正在从一个看起来像这样的数组中播种我的数据库(单词和定义有多对多关系):

var seeds = [
{
    "word": "Click",
    "definitions": ["Computer", "Mouse", "Tasto", "Pulsante", "Selezionare"]
}, {
    "word": "Galoppo",
    "definitions": ["Cavallo", "Andatura", "Trotto", "Ippica", "Passo"]
}, {
    "word": "Raggio",
    "definitions": ["Sole", "Bicicletta", "Diametro", "Luce", "Laser"]
}, {
.
.
.goes on for 1089 objects
Run Code Online (Sandbox Code Playgroud)

这是我试过的:

exports.seed = function (knex, Promise) {
var promises = seeds.map(function (seed) {
    return knex('words').insert({
        word: seed.word
    }, 'id').then(function (word_id) {
        var promises = seed.definitions.map(function (definition) {
            return knex('definitions').insert({
                definition: definition
            }, 'id').catch(function (err) {
                if (err.code …
Run Code Online (Sandbox Code Playgroud)

javascript mysql node.js knex.js

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

在 Deoplete 中使用 Ctrl-N 手动完成

我安装了 deoplete 并且它对我有用,但是默认情况下,只要您键入内容,它就会打开一个弹出窗口。这是不可取的。我希望弹出窗口仅在我点击Ctrl+时显示N。所以我禁用自动完成:

let b:deoplete_disable_auto_complete = 1
Run Code Online (Sandbox Code Playgroud)

但这使得Ctrl+ 的N行为与 deoplete 之前一样,即使用缓冲区中的所有单词作为完成源。

我也尝试从文档中添加代码,但无济于事:

            inoremap <silent><expr> <TAB>
            \ pumvisible() ? "\<C-n>" :
            \ <SID>check_back_space() ? "\<TAB>" :
            \ deoplete#mappings#manual_complete()
            function! s:check_back_space() abort "{{{
            let col = col('.') - 1
            return !col || getline('.')[col - 1]  =~ '\s'
            endfunction"}}}
Run Code Online (Sandbox Code Playgroud)

它重新映射 Tab 键,而不是Ctrl+ N。是否可以通过按Ctrl+来显示 Deoplete 手动完成N

vim autocomplete neovim

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

嵌套错误边界

我正在考虑在ReactJS中针对特定用例执行嵌套错误边界:

  • 在子组件中显示错误视图
  • 在父组件中显示错误对话框
    <ErrorBoundary1>
        <ErrorBoundary2><child1 /></ErrorBoundary2>
        <ErrorBoundary2><child2 /></ErrorBoundary2>
    </ErrorBoundary1>
Run Code Online (Sandbox Code Playgroud)

我已经尝试过这样做,但是当发生错误时,似乎没有通过父错误边界。我可以componentDidCatch对内部错误边界进行抛出,但这将使其陷入无限循环。

有什么建议吗?

reactjs

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

URL监视器在netstat中生成多个ESTABLISHED(连接)条目

我在Go中编写了一个URL监控程序,但经过一段时间后,我发现了很多ESTABLISHED条目netstat -nao|grep 80.

getHttpStatusCode函数:

    HttpClient = &http.Client{
        Transport: &http.Transport{
            Dial: func(netw, addr string) (net.Conn, error) {
                deadline := time.Now().Add(30 * time.Second)
                c, err := net.DialTimeout(netw, addr, 20*time.Second)
                if err != nil {
                    return nil, err
                }

                c.SetDeadline(deadline)
                c.SetReadDeadline(deadline)
                c.SetWriteDeadline(deadline)
                return c, nil
            },
        },
    }

// ...

func getHttpStatusCode(url string) int {
    if url == "" {
        return 200
    }

    req, err := http.NewRequest("GET", url, nil)
    if err != nil {
        return 0
    }

    req.Close = true
    req.Header.Add("User-Agent", …
Run Code Online (Sandbox Code Playgroud)

http go

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