如何阻止服务器刷新事件多次记录事件?

问题描述 投票:0回答:1

我正在尝试学习 Node.js。在自我练习期间将事件与服务器结合时,我遇到了一个奇怪的问题。

const {v4:uuid} = require('uuid');
const {format} = require('date-fns');
const Eventemit = require('events');      //Eventemit is a class
const os = require('os');
const path = require('path');
const fs = require('fs');
const http = require('http');


const user = os.userInfo().username;

const eventemitter = new Eventemit();    //eventemitter is an object of the class Eventemit

const server = http.createServer((req, res)=>{

    const date_time = `${format(new Date, 'dd.MM.yyyy  HH:mm:ss')}`
    eventemitter.on('log', ()=>{
        const req_string = `Log event: '${uuid()}' emitted by ${user} at time:    ${date_time} hrs.\n`;
    
        if(!fs.existsSync(path.join(__dirname, 'server_folder'))){
            fs.mkdir(path.join(__dirname, 'server_folder'), (err)=>{
                if(err){
                    console.error(err);
                }
            });
        }
    
        fs.appendFileSync(path.join(__dirname, 'server_folder', 'server_log.txt'), req_string, 'utf-8');

        res.write(req_string);
        res.end();
    })
    eventemitter.emit('log');
})

server.listen(5000);

当我在浏览器上刷新 localhost:5000 时,日志文本文件会在一次实例中多次注册它(请参阅随附的屏幕截图)。

enter image description here

请帮助我解决这个问题,提前致谢!

javascript node.js logging events server
1个回答
0
投票

这是预期行为:您已使用

http.createServer()
在代码中创建了 HTTP 服务器。每次服务器收到请求时都会调用您传递给
createServer
的回调函数。

当您刷新浏览器时,它会向您的服务器发送一个新的 HTTP 请求,从而触发回调函数(并将日志信息写入控制台)。

您可以通过将其移到请求处理程序之外来避免它

© www.soinside.com 2019 - 2024. All rights reserved.