Ответы пользователя по тегу Node.js
  • Как реализовать отправку 2х и более переменных в SailsJs?

    @friktor
    Эмм... Тут тебе лучше использовать промисы, т.е должно получиться чтото вроде.
    index: function (req, res, next) {
    		var Promise = require("bluebird");
    		
    		var countAllPosts = Post.count()
    			.then(function countResult (count) {
    				// Сторонние действия, итерации, и т.д...
    				return count; // Обязательно - так мы возвращаем объект promise
    			}); 
    
    		var posts = Post.find()
    			.sort({
    				"id": "desc"
    			})
    			
    			.paginate({
    				page: req.param("page", 1),
    				limit: 5
    			})
    
    			.then(function (posts) {
    				return posts; // также возвращаем promise объект
    			});
    
    		Promise
    			// Метод объеденения нескольких промисов.
    			.join(countAllPosts, posts, function (count, posts) {
    				res.view({
    					countPosts: countPosts,
    					posts: posts
    				});
    			})
    
    			// Независимая обработка ошибок, вне основной логики: cb(err, data) не лучший способ работы с данными в nodejs. 
    			.catch(function (errors) {
    				res.serverError(); // res.send(500) не родной метод sails и его лучше не использовать, имхо
    			})
    
    
    	}


    Самым основным соком тут являються промисы, из библиоткеки bluebird, и ключевой фактор - возврат объекта с обещанием. После этого - создав несколько переменных с действиями на этой технологии - мы объеденяем их с помощью join - и библиотека асинхронно выполняя их создает функцию с результатами выборки.
    После этого мы отдаем данные - выполненные без ошибок. Сами ошибки мы обрабатываем независимо от общей логики. Вот так вот. Лично от себя советую подробнее изучить Bluebird - в Sails все работает на нем.
    По поводу твоих личных ошибок - ты сделал 2 разные области действия. Колбэк не встраивает переменную в основную область действия - он выполняеться асинхронно внутри самой функции - и поэтому не видим никаким другим функциям. И ошибка выполнения - это неизвестная переменная. Если же ты хотел чтобы была видна переменная num из колбэка - нужно было внутри колбэка вызвать функцию поиска постов.

    P.S - прочитай всю документацию sails. Побольше используй трассировку и логирование ошибок хотябы через sails.log.error.
    Ответ написан
    Комментировать