2017-07-04 16 views
0

nodeJSアプリケーションで何が起こっているのか誰かが理解していますか? ajaxを使用して非同期呼び出しを行うと、サーバーは最初に404エラーで応答し、ページをロードします。アプリケーションは正常に動作しますが、「送信後にヘッダーを設定できません」という退屈なログがたくさんあります。ここ NodeJS - サーバが404で応答してからページをロードする

ここにルート部

module.exports = function(passport) { 
      var router = express.Router(); 
      ........ 
      router.get('/dashboard', isLogged, dashcontroller.showdashboard); 
      router.get('/dashboard/general', isLogged, dashcontroller.general); 
      ........ 
      return router; 
    } 

コントローラ

exports.showdashboard = function(req, res, next) { 
    if (req.user.status == 'active') 
    res.render('dashboard', { title: 'title' , user: req.user}); 
    else 
    res.redirect('/user/logout'); 

    next(); 
} 


exports.general = function(req, res, next) { 
    if (req.user.status == 'active') 
    res.render('general', { title: 'title' , user: req.user}); 
    else 
    res.redirect('/user/logout'); 

    next(); 
} 

非同期要求であり、このコードは、ダッシュボード/からクライアントによって到達可能であると公開/ JavaScriptの/ code.jsに常駐します。クライアントはそれを見つけて問題なく実行します。

$(function() { 
    $("li.infos").click(function() { 
     $("li.basket").removeClass("active") 
     $("li.infos").addClass("active") 
     $('.main-container') 
      .load('/user/dashboard/general'); 
    }); 
}); 

すべてが正常に動作しますが、私はまだそれらの退屈なログを取得

GET /stylesheets/dashboard.css 304 0.555 ms - - 
GET /javascripts/dashboard.js 304 0.280 ms - - 
GET /javascripts/basket.js 304 0.323 ms - - 
abc deserializeUser 
Executing (default): SELECT `id`, `username`, `public_key`, `email`, `password`, `last_login`, `basketcount`, `status`, `activation_token`, `createdAt`, `updatedAt` FROM `users` AS `user` WHERE `user`.`id` = 6; 

GET /user/dashboard/general 404 35.837 ms - 2290 
Error: Can't set headers after they are sent. 
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:356:11) 
    at ServerResponse.header (/home/me/Documents/app/node_modules/express/lib/response.js:730:10) 
and the trace goes on 

、誰もが何が起こっているかを理解していますか? アドバイスありがとうございます

答えて

1

Can't set headers after they are sent."は退屈なログメッセージではありません。

http応答を作成した後でnext()に電話しているので、問題が発生しています。例:

exports.showdashboard = function(req, res, next) { 
    if (req.user.status == 'active') 
    return res.render('dashboard', { title: 'title' , user: req.user}); 
    else 
    return res.redirect('/user/logout'); 
} 

exports.generalと同じ。

+0

ありがとうございました!すべて今はうまくいく! – giudaballerino

+2

あなたがすでに応答を送ったことがないなら、後でルートハンドラを実行させたいときは 'next()'だけを呼び出してください。 – jfriend00