嗨,我是nodejs
的新手,就我而言nodejs
是event-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)
}
}
根据我的理解,我编写了正常的代码,因为我曾经使用Ror
或PHP
编写。唯一的区别是我发现controller
正在运行asynchronous
不会发生在Ror
或Php
。
如何使用event-driven
架构来构建restful apis
答案 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/