Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение данных из MongoDB на Node.js 
:(
    Опции темы
Demonoid
Дата 3.2.2013, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 14.9.2007

Репутация: нет
Всего: нет



Жизнь в некоторых лицах заставила из тепленького, уютного PHP погрузиться в суровый JavaScript в исполнении Node.js. При выполнении ниже приведенного кода выдает ошибку "can't set headers after they are sent" Так понял, что кука не отправляется в виду невозможности изменения внешней переменной res. А как же тогда отправить куку? Или хотябы вывести хоть какую-нибудь переменную из анонимной функции. 

Читал что выводят как-то через колбаки, но везде примеры выводят результат в консоль (в этих примерах все понятно), а примера вывода результата в живую нету.

Код

var express=require('express');
var app=express.createServer();

app.configure(function(){
app.use(express.bodyParser());
app.use(express.cookieParser("SDFSF"));
})
app.use(express.cookieSession());

var mongo=require('mongodb').MongoClient;

function change_status(req,res) {
    var db=mongo.connect("mongodb://localhost:27017/shop", function(err, db) 
     {
        var collect_users = db.collection('users');

        collect_users.find().toArray(function(err,items)
        {           
            if(items[0]['hash']==req.cookies.hash)
            {
                res.cookie('status','active', { maxAge: 1000*60*10 });
            }
            else
            {       
                res.cookie('status','noactive', { maxAge: 1000*60*10 });
            }   
        });
    });
};

app.get("/",function(req,res){
change_status(req,res);
res.send("erewrwerew");
})

app.listen(2012);

PM MAIL   Вверх
Shogun
Дата 8.2.2013, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сёгун-сан
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 8.6.2006
Где: Кишинёв

Репутация: 1
Всего: 11



Вам нужно почитать про основы асинхроного программирования.

В вашем коде получается что кукисы отправляются уже после ответа так как данные выбираются асинхронно из базы, поэтому и ошибка.

А должно быть как-то так:
Код

function change_status(req, res, callback) {
    var db=mongo.connect("mongodb://localhost:27017/shop", function(err, db) 
     {
        var collect_users = db.collection('users');
        collect_users.find().toArray(function(err,items)
        {           
            if(items[0]['hash']==req.cookies.hash)
            {
                res.cookie('status','active', { maxAge: 1000*60*10 });
            }
            else
            {       
                res.cookie('status','noactive', { maxAge: 1000*60*10 });
            }   

            callback();
        });
    });
};

change_status(req,res, function() {
  res.send("erewrwerew");
});


И соединение с базой нет неабходимости делать при каждом запросе, node.js запускается один раз, тогда и подключайте базу и в запросах используйте это соединение.
+ Намного Вам легче будет работать с Mongoose для MongoDB.



--------------------
2b || !2b
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Node.js | Следующая тема »


 




[ Время генерации скрипта: 0.1218 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.