Hi Adam,
I've a mistake on the 'generator oriented' solution:
UserController.js
module.exports.create = function() {
return Q.spawn(function* () {
console.log("In controller: before service call");
let userDto = JSON.parse(this.request.body);
let savedUser = yield * userService.createUser(userDto);
console.log("In controller: after service call");
});
};
UserService.js
module.exports.createUser = function * createUser(userDto) {
let user = require('../domain/user/User');
user.login = userDto.login;
user.password = userDto.password;
let userRepository =
require('../infrastructure/user/UserRepository');
console.log("In service before promise resolve");
let savedUser = yield userRepository.createUser(user);
console.log("In service after promise resolve");
return savedUser;
};
On Wednesday, October 21, 2015 at 5:01:32 PM UTC+2, Adam wrote:
>
> In order to keep clean architecture of my node.js microservice I have
> controllers, services and e.g. repositories.
>
> I want a synchronous data flow: controller -> service -> repository ->
> service -> controller. In this flow (in simple user story) repository
> returns data to service and service to controller. But repository should
> process requests to external storage in a asynchronous way. All
> asynchronous code should exist only in repository, service should obtain
> raw data.
>
> My current implementation:
>
> UserController.js
>
> module.exports.create = function() {
> console.log("In controller: before service call");
>
> let userDto = JSON.parse(this.request.body);
> let savedUser = userService.createUser(userDto);
>
> console.log("In controller: after service call");
> };
>
> UserService.js
>
> module.exports.createUser = function createUser(userDto) {
>
> let user = require('../domain/user/User');
>
> user.login = userDto.login;
> user.password = userDto.password;
>
> let userRepository =
> require('../infrastructure/user/UserRepository');
>
> Q.spawn(function* () {
> console.log("In service before promise resolve");
>
> let savedUser = yield userRepository.createUser(user);
>
> console.log("In service after promise resolve");
>
> return savedUser;
> });
>
> console.log("In service: after repository call");
> };
>
> UserRepository.js
>
> module.exports.createUser = function createUser(user) {
> console.log("In repository: before save call");
>
> return new Q.Promise(function(resolve, reject) {
>
> userEntity.save(function(err, savedUser) {
>
> console.log("In repository: inside callback after save
> call");
>
> if (err) {
> console.log("In repository: inside callback before
> reject");
> reject(Error('Błąd zapisu danych!'));
> } else {
> console.log("In repository: inside callback before
> resolve");
> resolve(savedUser);
> }
> });
> });
> };
>
> Logs:
>
> - In controller: before service call
> - In service before promise resolve
> - In repository: before save call
> - In service: after repository call
> - In controller: after service call
> - In repository: inside callback after save call
> - In repository: inside callback before resolve
> - In service after promise resolve
>
> I would like to get the following sequence of logs:
>
> - In controller: before service call
> - In service before promise resolve
> - In repository: before save call
> - In repository: inside callback after save call
> - In repository: inside callback before resolve
> - In service after promise resolve
> - In controller: after service call
>
--
Job board: http://jobs.nodejs.org/
New group rules:
https://gist.github.com/othiym23/9886289#file-moderation-policy-md
Old group rules:
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
---
You received this message because you are subscribed to the Google Groups
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/nodejs/1114e4ae-f406-427a-a15d-ed90e9336f09%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.