Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取帖子不';写';经过6次尝试_Javascript_Node.js - Fatal编程技术网

Javascript 获取帖子不';写';经过6次尝试

Javascript 获取帖子不';写';经过6次尝试,javascript,node.js,Javascript,Node.js,我的代码中有事件监听器,它们应该触发对NodeJS脚本的POST-fetch命令,该脚本将内容输出到文件中。虽然代码当前有效,但在进行6次调用后会暂停。为了获得更多,我需要手动停止我的NodeJS应用程序并再次启动它,以便获得更多。触发此行为的代码缺少什么 dashboard.getParametersAsync().then(function (parameters) { parameters.forEach(function (p) { p.addEventListener(

我的代码中有事件监听器,它们应该触发对NodeJS脚本的POST-fetch命令,该脚本将内容输出到文件中。虽然代码当前有效,但在进行6次调用后会暂停。为了获得更多,我需要手动停止我的NodeJS应用程序并再次启动它,以便获得更多。触发此行为的代码缺少什么

dashboard.getParametersAsync().then(function (parameters) {
  parameters.forEach(function (p) {
      p.addEventListener(tableau.TableauEventType.ParameterChanged,onParameterChange);
  });
});

function onParameterChange (parameterChangeEvent) {
   parameterChangeEvent.getParameterAsync().then(function (param) {
      parameterIndicator = 'Parameter'
      const details = {
        method: 'POST',
        //body: JSON.stringify(data),
        //  headers: {
        //      'Content-Type': 'application/json'
        //  }
      };
    
 fetch(`https://serverurl/${param.name}/${parameterIndicator}/${getDateTimestamp()}/${dashboardName}/${param.name}/${worksheetData}`, details).then(
 (res) => {console.log(res);});
 });
}
NodeJS:

const app = require('express')();
const https = require('https');
const fs = require('fs');

app.get('/', (req, res) => {
    res.writeHead(200, {'Content-Type': 'text/html'});
  var readStream = fs.createReadStream('index.html','utf8');
  readStream.pipe(res);
});

app.post('/:fieldName/:flag/:time/:dashboard/:identifier/:user', async (req, res) => {
    console.log('POST message received', req.params);
    if (req.params && req.params.fieldName) {
        await fs.appendFileSync('./changeLog.csv', `${req.params.fieldName},${req.params.flag},${req.params.time},${req.params.dashboard},${req.params.identifier},${req.params.user}\n`);
    }
});
*Edit,根据我得到的一个响应,我在“fetch”命令之后添加了一个控制台输出,在浏览器中我看到它的增量超过了6。但是,我的应用程序在6点之后停止接收消息。见下图。

  • 在所有情况下,您都必须从
    POST
    发送响应
  • 您正在将
    appendFileSync
    函数(同步)与
    await
    一起使用-这表示您可能需要阅读一些关于它的文档
  • 以下是必须解决您的问题的代码:

    app.post('/:fieldName/:flag/:time/:dashboard/:identifier/:user',(req,res)=>{
    console.log('接收到POST消息',请求参数);
    if(请求参数和请求参数字段名){
    fs.appendFileSync('./changeLog.csv',`${req.params.fieldName},${req.params.flag},${req.params.time},${req.params.dashboard},${req.params.identifier},${req.params.user}\n`);
    返回res.send('OK')
    }
    //错误的请求
    资源状态(400).end()
    
    });服务器日志中有任何错误吗?Chrome将允许每个域有6个并发连接,因此它可能会拒绝进行更多连接,直到它收到对已存在连接的响应为止progress@530529在post路由中,您基本上需要结束请求并返回响应,例如
    res.sendStatus(200)
    ,否则,您只是挂起HTTP连接,直到它们最终超时。我对express不太熟悉,但我想您可能需要使用
    res.end()
    关闭连接。是的,就像James和andrew说的,您需要使用
    res
    对象发回服务器回复。再加上:您需要发送回复(即使是空的)的原因是,浏览器在任何时候都只能处理到主机名的一(6)个打开的连接。这对我很有效,谢谢!作为后续问题,由于可能有多个用户同时登录应用程序,我应该将appendFileSync更改为“Async”方法,还是对我没有影响?