用事件驱动的架构节点js创建restful apis?

时间:2017-12-05 12:19:56

标签: node.js event-driven

嗨,我是nodejs的新手,就我而言nodejsevent-driven,这是一个强大的功能。

我过去几天一直在学习nodejs并尝试使用mongodb在其中构建restful apis,但我无法在apis中使用其event-driven架构,我的sudo代码

//routes

   app.get('/someUrl', SomeClass.executeSomeController);


//controller

  class SomeClass {
    async executeSomeController(req, res){
       let response = awaitSomeHelper.executeQueryAndBusinessLogic(req.body);
       res.send(response)
  }

}

根据我的理解,我编写了正常的代码,因为我曾经使用RorPHP编写。唯一的区别是我发现controller正在运行asynchronous不会发生在RorPhp

如何使用event-driven架构来构建restful apis

1 个答案:

答案 0 :(得分:0)

希望我可以解答你的问题。基本上在某些情况下,“事件驱动的架构”术语可以用不同的方式解释。在一种情况下,它是解释所有异步功能的基本核心NodeJS流程。在另一种情况下,问题的根可以与事件,事件发射器等相关。

但是你必须等待所有异步操作的主要思想。为了避免线程阻塞,它会进一步处理代码的其余部分而无需等待繁重的请求。我们必须知道如何处理这种异步功能。

基本异步流程

据我了解,您在NodeJS中遇到了与异步操作相关的问题。这是技术的根源 - 所有繁重的操作都将异步处理。这都是关于V8和Event Loop的。

因此,为了使用异步操作,您可以使用回调函数,promises或async-await语法。

回调功能

function asyncFunction(params, callback) {
  //do async stuff
  callback(err, result);
}

function callbackFunction(err, result) {

}

asyncFunction(params, callbackFunction);

<强>承诺

promiseFunction()
  .then(anotherPromiseFunction)
  .then((result) => {
    //handle result
  })
  .catch((err) => {
    //handle error
  });

<强>异步-AWAIT

function anotherAsyncFunction() {
  //do async stuff
}

const asycnFunction = async (params) => {
  const result = await anotherAsyncFunction();
  return result;
};

事件/事件发射器

const fs = require('fs');

const filePath = './path/to/your/file';
const stream = fs.createReadStream(filePath);

stream.on('data', (data) => {
  //do something
});

stream.on('end', () => {
  //do something;
});

stream.on('error', (err) => {
  //do something;
});

您可以根据情况和需要使用这些方法。我建议跳过回调函数,因为我们有现代的方法在异步流(promises和async-await)中工作。顺便说一下,'async-await'也会返回承诺。

这是一个简单的Express JS Server(相当古老的语法)的例子,但仍然有效。请随时查看并撰写问题:

https://github.com/roman-sachenko/express-entity-based

以下是我推荐你的文章列表:

https://blog.risingstack.com/node-js-at-scale-understanding-node-js-event-loop/ https://blog.risingstack.com/mastering-async-await-in-nodejs/