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