2016-05-08 3 views
0

私はExpress、mongodb、mongooseの簡単なNodeJSテストアプリを持っています。今のところ、私はコードを少しきれいにして、ベストプラクティスを見つけることを試みています。私の措置の1つはRESTルートを抽出することですが、それを行う上で問題があります。私はそれができる方法の量によって混乱しています.2016年にそれを行う最良の方法は何ですか?nodejs RESTパスのエクスポート(エクスプレス付き)

私のコード(app.js):私は別ファイルとして/students/subjectsを抽出したいと私のapp.js.でそれらを必要と

"use strict" 
const express = require('express'); 
const bodyParser = require('body-parser'); 
const mongoose = require('mongoose'); 

const Subjects = require('./models/Subjects').model('Subjects'); 
const Students = require('./models/Students').model('Students'); 

const app = express(); 

app.use(express.static(__dirname + '/public')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ 
    extended: true 
})); 
mongoose.connect('mongodb://localhost/schoolapp'); 

app.get('/subjects', function(req, res) { 
    Subjects.find({}) 
     .exec(function(err, subjects) { 
      if(err) { 
       res.send('error msg has occured'); 
      } else { 
       res.json(subjects); 
      } 
     }) 
}); 

app.put('/subjects', function(req, res) { 
    const query = {name: req.body.name}; 
    const update = {$inc: {votes: 1}}; 

    Subjects.findOneAndUpdate(query, update, 
     function(err, newSubject) { 
      if(err) { 
       console.log('An error occured'); 
      } else { 
       res.send(newSubject); 
      } 
     }) 
}) 

app.post('/subjects', function(req, res) { 
    let newSubject = new Subjects(); 

    newSubject.name = req.body.name; 
    newSubject.level = req.body.level; 
    newSubject.votes = 0; 

    newSubject.save(function(err, subject) { 
     if(err) { 
      res.send('error saving subject'); 
     } else { 
      res.send(subject); 
     } 
    }) 
}); 

app.get('/students', function(req, res) { 
    Students.find({}) 
     .exec(function(err, students) { 
      if(err) { 
       res.send('error saving students'); 
      } else { 
       res.send(students); 
      } 
     }) 
}) 

app.post('/students', function(req, res) { 
    let newStudent = new Students(); 

    newStudent.name = req.body.name; 

    newStudent.save(function(err, student) { 
     if(err) { 
      res.send('error saving student'); 
     } else { 
      res.send(student); 
     } 
    }) 
}) 

app.put('/students', function(req, res) { 
    const query = {"_id": req.body.id}; 
    const update = {$push: {subjects: req.body.name}}; 

    Students.findOneAndUpdate(query, update, 
     function(err, newSubject) { 
      if(err) { 
       res.send('something went wrong'); 
      } else { 
       res.send(newSubject); 
      } 
     }); 
}) 

app.listen(3000, function() { 
    console.log('app listening on port 3000'); 
}); 

module.exports = function(app) { 
    app.get('/students', ...) 
} 

とapp.jsに:

var students = require(./rest/students)(app); 

感謝:)私はしました

+2

http://expressjs.com/en/api.html#router –

+0

はい、@ MH-cbonは右である:この(それは簡単な例を示しているので)

は私も有用な、この記事を見つけました複数のルータを使用するための完全なケースです。 – robertklep

+0

私はHTMLテンプレートを提供するつもりはありません、私はちょうど残りのAPIとしてノードを使用したい、これはまだ複数のルータのための完全なケースですか? – Baki

答えて

0


私は、以下を含む異なる結果と約3方法を試してみましたmh-cbonのおかげでそれを整理しました。他の誰かが質問を探している場合に備えて、ここに私のソリューションを投稿したかっただけです。

app.js

'use strict'; 
const express = require('express'); 
const bodyParser = require('body-parser'); 
const mongoose = require('mongoose'); 

const app = express(); 

app.use(express.static(__dirname + '/public')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ 
    extended: true 
})); 

app.use('/subjects', require('./rest/subjects')); 
app.use('/students', require('./rest/students')); 

mongoose.connect('mongodb://localhost/schoolapp'); 

app.listen(3000, function() { 
    console.log('app listening on port 3000'); 
}); 

students.js

'use strict'; 
const Students = require('../models/Students').model('Students'); 
const express = require('express'); 
let router  = express.Router(); 

router.get('/', function(req, res) { 
    Students.find({}) 
     .exec(function(err, students) { 
      if(err) { 
       res.send('error saving students'); 
      } else { 
       res.send(students); 
      } 
     }) 
}) 

router.post('/', function(req, res) { 
    let newStudent = new Students(); 

    newStudent.name = req.body.name; 

    newStudent.save(function(err, student) { 
     if(err) { 
      res.send('error saving student'); 
     } else { 
      res.send(student); 
     } 
    }) 
}) 

router.put('/', function(req, res) { 
    const query = {"_id": req.body.id}; 
    const update = {$push: {subjects: req.body.name}}; 

    Students.findOneAndUpdate(query, update, 
     function(err, newSubject) { 
      if(err) { 
       res.send('something went wrong'); 
      } else { 
       res.send(newSubject); 
      } 
     }); 
}) 

module.exports = router; 

注:./rest/subjectsを通じてapp.jsでパスを指定すると、モジュールにあなたのパスを行いますルート'/'(students.jsを参照)、いくつかのチュートリアルとは異なります。 https://www.terlici.com/2014/09/29/express-router.html

関連する問題