18

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);
  });
};

明らかに、これまでに実装されたメソッドは 2 つだけです。皆さんは、このアプローチについてどう思いますか? 改善できることはありますか?

また、小さな副次的な質問: すべての API リソース ファイルでマングースを要求する必要があります (のようにapi\kitten.js、app.js ファイルなどでグローバルに要求する方法はありますか?

どんな入力でも大歓迎です!

4

3 に答える 3