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.get
和app.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