Я создаю небольшой проект в узле, у меня есть маршруты из двух таблиц, drums
и pianos
в одном файле с именами маршрутов. js в двух разных функциях, называемых drums()
для барабанов и pianos()
для рояли. Я экспортировал обе функции, и они оба возвращают маршрутизатор. Маршрутизатор возвращает значение класса express.Route()
.
Я использовал эти две функции в индексе. js файл при импорте, я получаю доступ к маршруту по следующему коду
app.use('/pianos', routes.pianos());
app.use('/drums', routes.drums());
Но я получаю ответ только от одной функции, если я сначала сохраните
app.use('/pianos', routes.pianos());
, затем я получу список фортепиано с URL localhost / pianos и localhost / барабаны, а если я сначала сохраню
app.use('/drums', routes.drums());
, то я получу список барабанов с URL localhost / барабаны и localhost / фортепиано, а также. В чем здесь ошибка?
const express = require('express');
const router = express.Router();
const joi = require('joi');
function drums(){
drums = [
{id:1, name:'Bongo drum'},
{id:2, name:'Bass drum'},
{id:3, name:'Ashiko'},
{id:4, name:'Basler drum'},
{id:5, name:'Cajón'}
];
router.get('/', (req, res)=>{
res.send(drums);
});
router.get('/:id', (req, res) =>{
const drum = drums.find( c=> c.id === parseInt(req.params.id));
if(!drum){
return res.status(404).send("Error: Drum is not available");
}
res.send(drum.name);
});
router.post('/', (req, res)=>{
const {error} = validator(req.body);
if(error) return res.status(400).send('Eror 400: Bad request', error.details[0].message);
const drum = {id:drums.length+1, name:req.body.name};
drums.push(drum);
res.send(drum);
}
);
router.put('/:id', (req, res)=>{
const drum = drums.find(c=> c.id === parseInt(req.params.id));
if(!drum) return res.status(404).send('Error: Drum is not available');
const {error} = validator(req.body);
if(error) return res.status(400).send('Error 400: Bad request', error.details[0].message);
drum.name = req.body.name;
res.send(drum);
});
return router;
}
function pianos(){
const pianos = [
{id:1, name:'Yamaha U1'},
{id:2, name:'Roland RD-2000'},
{id:3, name:'Nord Piano 4'},
{id:4, name:'Yamaha NU1X'},
{id:5, name:' Dexibell Vivo S7'}
];
router.get('/', (req, res)=>{
res.send(pianos);
});
router.get('/:id', (req, res)=>{
const piano = pioanos.find(c=> c.id === parseInt(req.params.id));
if(!piano) return res.status(404).send('Error:The piano is not available');
res.send(piano);
});
router.post('/', (req, res)=>{
const {error} = validator(req.body);
if(error) return res.status(400).send('Error-Bad request', error.details[0].message);
const piano = {id:pianos.length+1, name:req.body.name};
pianos.push(piano);
res.send(piano);
});
router.put('/:id', (res, req)=>{
const piano = pioanos.find(c=> c.id === parseInt(req.params.id));
if(!piano) return res.status(404).send('Error: Piano is the available');
const {error} = validator(req.body);
if(error) return res.status(400).send('Error:Bad request', error.details[0].message);
piano.name = req.body.name;
res.send(piano);
});
return router;
}
function validator(instrument){
const schema={
name:joi.string().min(5).required()
};
return joi.validate(instrument, schema);
}
module.exports.drums = drums;
module.exports.pianos = pianos;
МОЙ индекс. js Файл выглядит следующим образом:
const mongoose = require('mongoose');
const express = require('express');
const app = express();
const debug = require('debug')('pm:index');
const routes = require('./routes/routes');
mongoose.connect('mongodb:localhost/planetmusic')
.then(()=> debug('Connected to database'))
.catch(err => debug('Error!!Could not connect to database', err.message));
app.use(express.json());
app.use(express.urlencoded({extended: true}));
app.use(express.static('public'));
app.use('/drums', routes.drums());
app.use('/pianos', routes.pianos());
const port = process.env.port || 5000;
app.listen(port, ()=> console.log(`listening at port: ${port}`));
Если есть другие лучшие решения для управления всеми моими маршрутами, пожалуйста, помогите мне.