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/53416630-064b-4882-bd8a-29d77e38676d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to