簡體   English   中英

錯誤:發送Node.js和ExpressJS后無法設置標頭

[英]Error: Can't set headers after they are sent Node.js and ExpressJS

我正在使用Node.js和ExpressJS保存貓鼬模型。 我收到Error: Can't set headers after they are sent. 我認為這與行res.redirect("/dashboard/it/model"); setRedirect({auth: '/login'}),沖突setRedirect({auth: '/login'}),從我的路線來看,setRedirect中的代碼在下面標記。 setRedirect來自稱為middleware-responder程序的中間件,該中間件是我用來創建Stripe用戶帳戶的模板的一部分。 據我所知,我無法將其刪除。 我的GitHub存儲庫中,我已提交了所有不是測試文件且相關的文件(沒有多余的視圖等已存在的視圖)

保存模型

if(type=="aps"){
      var newAccessPoint = {
          name: name,
          manufacturer: manufacturer,
          model: model,
          range: range, 
          bands: bands,
          channel: channel,
          poe: poe,
          notes: notes,
          signout: signout,
          author:author
        };
      // Create a new access point and save to DB
      AP.create(newAccessPoint, function(err, newlyCreated){
          if(err){
              console.log(err);
          } else {
              //redirect back to models page
              res.redirect("/dashboard/it/model");
          }
      });
    }

路線

app.post('/dashboard/it/model/new',
    setRender('dashboard/it/modelCreate'),
    setRedirect({auth: '/login'}),
    isAuthenticated,
    dashboard.getDefault,
   (req, res) => {

setRedirect代碼

exports.setRedirect = function(options){
  return function(req, res, next){
   if(req.redirect){
     req.redirect = _.merge(req.redirect, options);
   } else {
     req.redirect = options;
   }
   next();
 };
};

setRender代碼

exports.setRender = function(view){
  return function(req, res, next){
    req.render = view;

    next();
  };
};

發生這種情況是因為您已經嘗試在關閉連接后嘗試向客戶端發送響應。

很難通過向我們展示代碼的方式來區分,但是似乎您正在重定向到選項,然后在同一請求中您將重定向到儀表板/它/模型

我從github提取您的代碼。 我認為錯誤消息很清楚。 getDefault()中間件中,您正在呈現響應,以便服務器開始將數據發送到您的客戶端,並且在您嘗試將其重定向到另一個URL之后。 這就是為什么當您注釋掉該中間件時,它們都能很好地工作的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM