ExpressJS和Mongoose REST API结构:最佳实践?

我使用NodeJS(Mongoose&ExpressJS)构build了一个REST API。 我认为目前我有一个非常好的基本结构,但是我想知道这种项目的最佳做法是什么。

在这个基本的版本中,一切都通过app.js文件。 然后每个HTTP方法都被传递给请求的资源。 这允许我dynamic地将资源添加到API,并且每个请求将相应地传递。 为了显示:

 // app.js var express = require('express'); var mongoose = require('mongoose'); var app = express(); app.use(express.bodyParser()); mongoose.connect('mongodb://localhost/kittens'); var db = mongoose.connection; var resources = [ 'kitten' ]; var repositories = {}; for (var i = 0; i < resources.length; i++) { var resource = resources[i]; repositories[resource] = require('./api/' + resource); } db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function callback() { console.log('Successfully connected to MongoDB.'); app.get('/:resource', function (req, res) { res.type('application/json'); repositories[req.params.resource].findAll(res); }); app.get('/:resource/:id', function (req, res) { res.type('application/json'); repositories[req.params.resource].findOne(req, res); }); app.listen(process.env.PORT || 4730); }); 

 // api/kitten.js var mongoose = require('mongoose'); var kittenSchema = mongoose.Schema({ name: String }); var Kitten = mongoose.model('Kitten', kittenSchema); exports.findAll = function (res) { Kitten.find(function (err, kittens) { if (err) { } res.json(kittens); }); }; exports.findOne = function (req, res) { Kitten.findOne({ _id: req.params.id}, function (err, kitten) { if (err) { } res.json(kitten); }); }; 

显然,到目前为止只有一些方法已经实施。 你们怎么看待这个方法? 任何我可以改进的地方?

此外,一个小问题:我必须要求在每个API资源文件mongoose(如在api\kitten.js ,有没有办法只是全球需要它在app.js文件或东西?

任何input,非常感谢!

那么,你可以分开你的路线,数据库模型和模板在不同的文件。 有一个像这样的目录结构,

 | your_app | -- routes | -- models | -- templates | -- static | -- css | -- js | -- images | -- config.js | -- app.js | -- url.js 
  • 对于每个Mongoose模型有一个单独的文件放置在您的./models
  • 在templates目录下放置你的jade文件。 (假设你使用玉作为你的模板引擎)。 虽然看起来你只是提供JSON,而不是HTML。 如果您想呈现HTML,请考虑使用Jade。 (这里有几个其他模板引擎,你可以考虑使用)
  • 。静态JS,CSS和XML文件的静态目录等
  • 像db连接或第三方API密钥和东西的东西可以放在config.js
  • 在url.js中有一个程序,它把快速的app对象作为参数,并且在app.getapp.post之后在一个地方扩展。

PS这是我用一个基本的networking应用程序快递的方法。 我没有办法说这是最好的方法,但它帮助我维护我的代码。

没有正确的方法,但我确实为我的个人目录结构创build了一个种子应用程序来帮助我的室友。

你可以克隆它: git clone https://github.com/hboylan/express-mongoose-api-seed.git

或者用npm: npm install express-mongoose-api-seed

正如Codemonger5所说,目前没有正确的方式来组织目录结构。

但是,您可以使用这个样板应用程序使用Express和Mongoose使用ES6创buildREST API。 我们在生产API服务中使用相同的目录结构。

 git clone https://github.com/KunalKapadia/express-mongoose-es6-rest-api cd express-mongoose-es6-rest-api npm install npm start