我正在使用NodeJS(Mongoose& ExpressJS)构建REST API。我认为我目前有一个非常好的基本结构,但我想知道这类项目的最佳实践是什么。
在这个基本版本中,所有内容都通过app.js
文件。然后将每个HTTP方法传递给已请求的资源。这允许我动态地向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文件中全局要求它?或者什么?
非常感谢任何输入!
答案 0 :(得分:13)
那么,您可以在不同的文件中分离您的路线,数据库模型和模板。 有一个这样的目录结构,
| your_app
| -- routes
| -- models
| -- templates
| -- static
| -- css
| -- js
| -- images
| -- config.js
| -- app.js
| -- url.js
./models
./static
目录,用于静态JS,CSS和XML文件等。app
个对象作为参数,并在app.get
和app.post
上单独放置。P.S。这是我在Express中使用基本Web应用程序的方法。我绝不是说这是最好的方法,但它有助于我维护我的代码。
答案 1 :(得分:6)
没有正确的方式,但我确实为我的个人目录结构创建了种子应用程序,以帮助我的室友。
您可以克隆它:git clone https://github.com/hboylan/express-mongoose-api-seed.git
或者使用npm:npm install express-mongoose-api-seed
答案 2 :(得分:5)
由于codemonger5表示没有正确的组织目录结构的方法。
但是,您可以使用this样板应用程序使用Express创建REST API,使用ES6创建mongoose。我们在生产API服务中使用相同的目录结构。
git clone https://github.com/KunalKapadia/express-mongoose-es6-rest-api
cd express-mongoose-es6-rest-api
npm install
npm start