2014-04-29 60 views
1

我正在用node.js/Express 3/Mongoose/MongoDB構建一些web服務。我通常會看到兩種方式將代碼從server.js移動到外部文件,我想知道主要區別是什麼,如果一個比另一個更好?我已經概述了以下兩種技術。我傾向於使用方法2,但我發現require('./routes/cats')(app, CatModel);沒有var =,但它看起來不正確。什麼是node.js/Express/MongoDB REST全API的最佳設計

  1. 按功能。路由是在server.js中內嵌的,但邏輯被移到外部文件中。

一些人做這種方式:

// server.js

app.get('/cats', cats.findAll); 

//路線/ cats.js

exports.findAll = function(req, res) { 
    // Lookup all the cats in MongoDB/CatModel. 
}; 
  1. 由應用程式。應用程序被傳入並且路由建立在它上面。

//在server.js

require('./routes/cats')(app, CatModel); 

//在路由/ cats.js

module.exports = function(app, CatModel) { 
    app.get('/cats', function (req, res) { 
     CatModel.find({}, function (err, docs) { 
      if (err || !docs) { 
       res.json(kStatusInternalServerError, {error: err}); 
       console.log(err); 
      } else { 
       res.json(kStatusOk, docs); 
      } 
     }); 
    }); 
}; 

回答

1

默認方式是第一個 - 這就是爲什麼我們大多數人使用它。我更喜歡把我的所有路線都很好地排列在app.js中,其他所有的實際上都是。我還沒有看到第二種生產方式,我也沒有看到使用邏輯進行佈線的優勢。

+0

謝謝。你會說它的共同點是添加功能來通過ID,名字或者所有的貓在貓鼬身上找到CatModel嗎?或者這通常是在'cats'路由器文件中完成的嗎? –

+0

@JasonLeach這超出了這個問題的範圍,幸運的是,要求一個新的問題很容易。如果我回答了您的問題,請立即加入並接受! – SomeKittens

+0

我認爲第二種方法的優點是保持與處理的邏輯路線。所以如果你有像'/ cats /:cat_id'這樣的params參數的路徑,它接近檢索參數'req.params.cat_id'的代碼。在第一種方法中,您需要轉到代碼中的兩個不同位置進行管理。我知道它不應該改變很多,但仍然是。 –

相關問題