2016-04-05 25 views
0

Şu anda middlewares kullanarak bir Express uygulaması geliştiriyorum. İlk adım, kullanıcıları doğrulamak zorundayım. app.js ben ettik:Başlıklar gönderildikten sonra yanıt göndermek imkansız

app.post('/api/ecosystem/project/auth', 
    middleware.authenticate, 
    function(req,res){ 
    } 
); 

katman, ben kullanıcı tarafından sağlanan params erişmek gerekir, bu yüzden başlıklarını belirleyen body erişim sağlar. middleware/index.js yılında: Geri dönerek durum kodu göndermek çalıştığınızda

function authenticate(req, res, next){ 
     var plainPassword = req.body.password, 
      userName = req.body.username; 

     models.connection.query(
       `SELECT * FROM TABLE_1 WHERE username = ?`, 
       [userName] ,function(err, query) { 
        var err = true; //for testing purposes 
        if (err) res.statusCode = 500; 

       console.log('continues'); 
       //... 

sorun geliyor. Üstbilgiler ayarlandığında, bir hata parametresiyle res.send(), res.status(), next() yöntemlerini kullanamıyorum. Bunu yaparsam, Headers have already been sent hakkında bir hatam var. very amazing answer here about this var.

Bu yüzden yalnızca res.statusCode'u kullanabilirim, ancak bu durum durumu döndürmez ve akışı durdurmaz. Ayrıca, bir JSON dosyasında err.message gibi diğer paramları gönderemiyorum.

Bunu nasıl çözeceğiniz hakkında bir fikrin var mı?

Teşekkürler!

cevap

1

err nesnesinde statusCode öğesini saklayabilir ve next işlevine iletebilirsiniz. Rotalarınız uygun şekilde tanımlanmışsa, işlenmemiş hataları işlemek için ara katman yazılımınız olmalıdır. Bu işleyici doğru yanıt durumu Kodunu ayarlamak için err.statusCode'u kullanabilir. Gelen

function authenticate(req, res, next){ 
    var plainPassword = req.body.password; 
    var userName = req.body.username; 

    models.connection.query(
    `SELECT * FROM TABLE_1 WHERE username = ?`, 
    [userName], 
    function(err, query) { 
     if (err) { 
     err.statusCode = 500; 
     return next(err); 
     } 
    } 
); 
}); 

senin routes.js sahip olmalısınız:

YOUR ROUTES 

app.use(function(err, req, res, next) { 
    res.status(err.statusCode).send(err); 
}); 
İlgili konular