Я довольно новичок в создании API-интерфейсов с узлом, Express и Mongo.Маршрут в экспресс не найден
Я пытаюсь модулизовать свой API Express Mongoose, но по какой-то причине мой код не видит экспортированный маршрут.
Когда я использую PostMan для тестирования, я получаю ошибку 404.
Все мои файлы находятся в той же папке
У меня есть главный app.js файл:
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var cors = require('cors');
mongoose.connect('mongodb://localhost/guestbook');
var app = express();
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(cookieParser());
app.use(cors());
app.use('/api', require('./routes/api'));
// changes it to use the optimized version for production
app.use(express.static(path.join(__dirname, '/dist')));
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
module.exports = app;
У меня есть api.js файл, который я ссылку в моих app.js:
//DEPENDENCIES
var express = require('express');
var router = express.Router();
//include the routes file
var guestbook = require('./guestbook');
router.route('/guestbook');
//RETURN ROUTER AS MODULE
module.exports = router;
И, наконец, мой маршрут, который мой guestbook.js файл:
//DEPENDENCIES
var express = require('express');
var router = express.Router();
//GUESTBOOK END POINTS
var Guestbook = require('../models/guestbook')
router.route('/guestbook')
.post(function(req, res) {
var guestbook = new Guestbook();
guestbook.firstname = req.body.firstname;
guestbook.lastname = req.body.lastname;
guestbook.email = req.body.email;
guestbook.postedon = req.body.postedon;
guestbook.comment = req.body.comment;
guestbook.rate = req.body.rate;
guestbook.save(function(err) {
if (err)
res.send(err);
res.json({ message: 'Post created!' })
});
})
.get(function(req, res) {
Guestbook.find(function(err, guestbook) {
if (err)
res.send(err);
res.json(guestbook);
});
});
router.route('/guestbook/:id')
.get(function(req, res) {
Guestbook.findById(req.params.id, function(err, guestbook) {
if (err)
res.send(err);
res.json(guestbook);
});
})
.put(function(req, res) {
Guestbook.findById(req.params.id, function(err, guestbook) {
if (err)
res.send(err);
//USING OBJECT.KEYS TO UPDATE ONLY PARAMS PASSED
Object.keys(req.body).forEach(function(prop) {
if (typeof req.body[prop] !== 'undefined') {
guestbook[prop] = req.body[prop];
}
});
guestbook.save(function(err) {
if (err)
res.send(err);
res.json(guestbook);
});
});
})
.delete(function(req, res) {
Guestbook.remove({ _id: req.params.id }, function(err, guestbook) {
if (err)
res.send(err);
res.json({ message: 'Successfully deleted!' });
});
});
//RETURN ROUTER AS MODULE
module.exports = router;
Если бы я переименовал свой файл guestbook.js в api.js и ссылался на него непосредственно из моего app.js, все работает нормально, но я пытаюсь использовать файл api.js посередине, поэтому могу лучше организовать мой код.
Любой совет мудреца о том, как исправить это было бы здорово !! Не уверен, что мне не хватает, что дает мне ошибку 404.
Это также верно, но он также не работает с файлом guestbook.js. – Paul
Я не уверен, что это проблема, поскольку я пытался использовать это (после localhosl: 3000) в Postman, и я до сих пор получаю 404. Как говорится, вы предлагаете использовать один маршрут «/ api/guestbook/guestbook /: id ", и это должно быть хорошо для всех глаголов? – cnak2
@Paul - Да, вы правы. Я добавил код для этого ответа. – jfriend00