запрос multipart / form-data не выполнен. Поток неожиданно закончился

Фиксированные узлы в силовой компоновке для d3v4 и d4v5

В d3v3 d.fixed будут фиксированы узлы в d.x и d.y; однако в d3v4 / 5 этот метод больше не поддерживается. В документации d3 указано:

. Чтобы исправить узел в данной позиции, вы можете указать два дополнительных свойства:

fx - the node’s fixed x-position

fy - the node’s fixed y-position

В конце каждого тика после применения любых сил узел с определенным узлом.fx имеет node.x сбрасывается на это значение и устанавливается node.vx до нуля; Аналогично, узел с определенным узлом.fy имеет node.y сбрасывается на это значение, а node.vy устанавливается на ноль. Чтобы исключить ранее установленный узел, установите node.fx и node.fy в значение null или удалите эти свойства.

Вы можете установить атрибуты fx и fy для силы узлов в вашем источнике данных, или вы можете динамически добавлять и удалять значения fx и fy. Ниже приведенный ниже фрагмент устанавливает эти свойства в конце событий перетаскивания, просто перетащите узел, чтобы зафиксировать его положение:

var data ={ 
 "nodes": 
  [{"id": "A"},{"id": "B"},{"id": "C"},{"id":"D"}], 
 "links": 
  [{"source": "A", "target": "B"}, 
   {"source": "B", "target": "C"},
   {"source": "C", "target": "A"},
   {"source": "D", "target": "A"}]
}
var height = 250;
var width = 400;

var svg = d3.select("body").append("svg")
  .attr("width",width)
  .attr("height",height);
  
var simulation = d3.forceSimulation()
    .force("link", d3.forceLink().id(function(d) { return d.id; }).distance(50))
    .force("charge", d3.forceManyBody())
    .force("center", d3.forceCenter(width / 2, height / 2));
    
var link = svg.append("g")
  .selectAll("line")
  .data(data.links)
  .enter().append("line")
  .attr("stroke","black");

var node = svg.append("g")
 .selectAll("circle")
 .data(data.nodes)
 .enter().append("circle")
 .attr("r", 5)
 .call(d3.drag()
   .on("drag", dragged)
   .on("end", dragended));
 
simulation
 .nodes(data.nodes)
 .on("tick", ticked)
 .alphaDecay(0);

simulation.force("link")
 .links(data.links);
      
function ticked() {
 link
   .attr("x1", function(d) { return d.source.x; })
   .attr("y1", function(d) { return d.source.y; })
   .attr("x2", function(d) { return d.target.x; })
   .attr("y2", function(d) { return d.target.y; });
 node
   .attr("cx", function(d) { return d.x; })
   .attr("cy", function(d) { return d.y; });
}    
    
function dragged(d) {
  d.fx = d3.event.x;
  d.fy = d3.event.y;
}

function dragended(d) {
  d.fx = d3.event.x;
  d.fy = d3.event.y;
}

0
задан memo 16 January 2019 в 17:14
поделиться

2 ответа

В случае, если кто-то еще столкнется с той же проблемой - мне нужно было иметь все 3 дополнительных поля, включая известные Длина

    let stream = new Readable();
    stream.push(foo);
    stream.push(null);
    form.append('inputFiles[]', stream, {
      filename : 'test.xml',
      contentType: 'application/xml',
      knownLength: foo.length
    }); //extra fields necessary
0
ответ дан memo 16 January 2019 в 17:14
поделиться

Могу ли я предложить другой подход? Поскольку вы используете ответ с 2014 года ...

let form = new FormData();
                form.append('fieldName', 'fileBuffer/DataString', 'fileName');

                axios.post('url', form, {
                    headers: {
                        'Content-Type': `multipart/form-data; boundary=${form._boundary}`
                    }
                }).then((res) => {
                    console.log(res.data);
                    res.json(responseFromServer.data);
                }).catch((err) => {
                    res.status(400).send(err);
                });
0
ответ дан Ido Cohen 16 January 2019 в 17:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: