У меня есть простое тестовое приложение NodeJS с экспресс, mongodb и mongoose. На данный момент я пытаюсь немного очистить свой код и найти лучшие методы. Одним из моих шагов является извлечение маршрутов REST, но у меня есть проблема в этом, и я смущен количеством способов сделать это, что лучший способ сделать это в 2016 году?Экспортировать узлы пути REST (с помощью экспресс)
Мой код (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');
});
Я хочу, чтобы извлечь /students
и /subjects
в виде отдельных файлов и требовать от них в моем app.js.
Я попытался около 3 методов с различными результатами, в том числе:
module.exports = function(app) {
app.get('/students', ...)
}
и в app.js:
var students = require(./rest/students)(app);
Большое спасибо :)
http://expressjs.com/en/api.html#router –
Да, @ тк-cbon прав: это является идеальным примером использования нескольких маршрутизаторов. – robertklep
Я не собираюсь обслуживать html-шаблоны, я просто хочу использовать узел в качестве априори для отдыха, это все-таки прекрасный случай для нескольких маршрутизаторов? – Baki