node js中文件写入一次后清除res.write?

clear res.write after the file is written once in node js?

//Sending UDP message to TFTP server
//dgram modeule to create UDP socket
var express= require('express'), fs= require('fs'),path = require('path'),util = require('util'),dgram= require('dgram'),client= dgram.createSocket('udp4'),bodyParser = require('body-parser'),app = express(), ejs = require('ejs');
var plotly = require('plotly')("Patidar2", "9z2dlsvsqn")


// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
app.use(express.static('public'));

//Reading in the html file for input page
app.get('/', function(req, res){
    var html = fs.readFileSync('index2.html');
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end(html);
});

//reading in html file for output page
app.get('/output', function(req, res){
    var html = fs.readFileSync('index4.html');
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end(html);
});

//Recieving UDP message

app.post('/output', function(req, res){
  var once= req.body.submit;

  if (once == "Once") {
    //Define the host and port values of UDP
    var HOST= req.body.ip;
    var PORT= req.body.port;
    //Reading in the user's command, converting to hex
    var message = new Buffer(req.body.number, 'hex');

    //Sends packets to TFTP

    client.send(message, 0, message.length, PORT, HOST, function (err, bytes) {
        if (err) throw err;
      });

      //Recieving message back and printing it out to webpage
    client.on('message', function (message) {
      fs.readFile('index3.html', 'utf-8', function(err, content) {
      if (err) {
        res.end('error occurred');
        return;
      }
      var temp = message.toString();  //here you assign temp variable with needed value

      var renderedHtml = ejs.render(content, {temp:temp, host: HOST, port: PORT});  //get redered HTML code
        res.end(renderedHtml);
      //var data = [{x:[req.body.number], y:[temp], type: 'scatter'}];
      //var layout = {fileopt : "overwrite", filename : "simple-node-example"};
  /*    plotly.plot(data, layout, function (err, msg) {
        if (err) return console.log(err);
        console.log(msg);
      }); */
    });
  });
}

//Send UDP packet continuously every ten seconds
   if (once == "continuous") {
     var timesRun = 0;
     var requestLoop = setInterval(function(){
     timesRun += 1;
      if(timesRun === 2){
        clearInterval(requestLoop);
      }
//Define the host and port values of UDP
  var HOST= req.body.ip;
  var PORT= req.body.port;
//Reading in the user's command, converting to hex
  var message = new Buffer(req.body.number, 'hex');

//Sends packets to TFTP

  client.send(message, 0, message.length, PORT, HOST, function (err, bytes) {
          if (err) throw err;
      });
}, 10000);
//Recieving message back and printing it out to webpage


    client.on('message', function (message) {
      var HOST= req.body.ip;
      var PORT= req.body.port;
        fs.readFile('index3.html', 'utf-8', function(err, content) {
          if (err) {
            res.end('error occurred');
            return;
          }
          var temp = message.toString();  //here you assign temp variable with needed value

          var renderedHtml = ejs.render(content, {temp:temp, host: HOST, port: PORT});  //get redered HTML code
          res.write(renderedHtml);
      //var data = [{x:[req.body.number], y:[temp], type: 'scatter'}];
      //var layout = {fileopt : "overwrite", filename : "simple-node-example"};

      //plotly.plot(data, layout, function (err, msg) {
        //if (err) return console.log(err);
        //console.log(msg);
      //});
    });
  });
}
});



//Setting up listening server
app.listen(3000, "192.168.0.136");
console.log('Listening at 192.168.0.136:3000');

我创建了一个连续按钮,它使用 setInterval 每十秒发送一次相同的 UDP 数据包,但是因为我正在阅读 index3.html。每次收到消息时都会复制 html 文件。图片告诉你。我希望能够在每个数据包之后更新输出。

如果您希望服务器能够将未来的更新发送到页面(我猜您在这里试图解决的真正问题是什么),那么 http request/response 不是完全正确的架构。

相反,您需要一种服务器推送形式,其中服务器可以在需要时向页面发送数据,页面可以接收该数据,然后按需要将其插入页面。

如今通常的机制是 webSocket 或更高级别的变体,socket.io。

在 socket.io 方案中,服务器为传入的 socket.io 连接设置侦听器。然后,任何希望能够接收更新的页面都会与服务器建立 socket.io 连接并为某些消息注册侦听器。然后,当服务器上发生了一些有趣的事情并且它想要通知一个或多个连接的网页时,服务器可以向该网页发送 socket.io 消息。网页将收到该消息,然后可以根据需要对其进行处理(例如,使用新数据更新当前显示的网页)。

您可以在此处阅读有关 socket.io 的更多信息:http://socket.io/


除了 webSocket 之外的另一个选项是让您的网页定期向您的服务器发送 ajax 调用,您的服务器可以 return 它拥有的任何新数据,然后客户端可以处理该数据(类似于 webSocket 处理发送的数据的方式)。这称为客户端轮询。它的实现可能稍微简单一些,但它的可扩展性较差,而且通常响应速度不快,因为客户端必须定期询问服务器是否有任何新内容,而大多数时候服务器只会响应 "nothing new yet".


以后,我建议您避免发布三个非常接近同一事物的问题here, and 。应该编辑问题以使其清楚,而不是仅仅再次发布。而且,新问题应该与以前的问题有很大不同。如果您没有得到问题的答案,可能是因为不清楚您的问题。