【问题标题】:How to use EventEmitter in Node.js如何在 Node.js 中使用 EventEmitter
【发布时间】:2020-10-18 18:09:28
【问题描述】:

我在 Node.js 中创建了一个带有单一路由的小型 Express 服务器。当 HTTP 请求用于 GET '/get-jobs' 时,我想发出一个事件,将所述事件传达给另一个文件,该文件将 axios 请求发送到 console.log 我指定的页面 URL 上的数据。但是,由于某种原因,我的 EventEmitter 没有正确监听 axios 文件。我该如何解决这个问题?

这是我的切入点:

import express from 'express';
import dotenv from 'dotenv';

import EventEmitter from './EventEmitter.js';

const app = express();
dotenv.config({ path: './config.env' });

app.use(express.json());

app.get('/get-jobs', (req, res) => {
  console.log('Route was hit');
  EventEmitter.emit('getJobs', req);
});

app.listen(process.env.PORT, () => {
  console.log(`Listening on port ${process.env.PORT}...`);
});

这是我当前未监听的 axios 作业文件:

import axios from 'axios';
import EventEmitter from './EventEmitter.js';

EventEmitter.on('getJobs', () => {
    await main();
  console.log('Test');
});

async function main() {
  try {
    const { data } = await axios.get(
      'https://www.monster.com/jobs/search/?q=javascript&where=Saint-Louis__2C-MO&stpage=1&page=4'
    );

    console.log(data);
  } catch (err) {
    console.log(err);
  }
}

这是我的事件发射器文件:

import EventEmitter from 'events';

export default new EventEmitter();

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    很简单,因为您没有在应用中包含(包含 axios 的)文件。监听事件的文件还没有开始。因此,请尝试在您正在运行的应用程序中导入该文件。并且不要忘记在您的情况下添加 async 关键字。

    EventEmitter.on('getJobs', async () => { await ...
    

    请记住,我们在发布事件之前会监听它们。 希望这个答案有帮助。

    【讨论】:

      猜你喜欢
      • 2012-05-03
      • 2017-12-08
      • 2019-09-20
      • 2012-12-17
      • 2021-12-30
      • 2021-10-26
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多