Ich bin ziemlich neu beim Erstellen von APIs mit Node, Express und Mongo.Route in Express nicht gefunden
Ich versuche meine Express Mongoose API zu modularisieren, aber aus irgendeinem Grund sieht mein Code die exportierte Route nicht.
Wenn ich PostMan zum Testen verwende, bekomme ich einen 404 Fehler.
Alle meine Dateien im selben Ordner
Ich habe meine Haupt app.js Datei befinden:
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;
ich meine api.js Datei, die ich in meinem app.js Referenz:
//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;
Und schließlich meine Route, die meine guestbook.js Datei ist:
//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;
Wenn ich meine guestbook.js-Datei in api.js umbenennen und direkt von meiner app.js verweisen würde, funktioniert alles gut, aber ich versuche, eine api.js-Datei in der Mitte zu verwenden, also kann ich besser meinen Code organisieren.
Irgendwelche weisen Ratschläge, wie das zu beheben wäre toll !! Nicht sicher, was ich vermisse, das gibt mir den 404 Fehler.
Das stimmt auch, aber er benutzt auch nicht die Datei guestbook.js. – Paul
Ich bin mir nicht sicher, dass das Problem ist, wie ich versucht habe (nach Localhosl: 3000) in Postman und ich immer noch die 404. Sagt, dass Sie vorschlagen, dass ich eine einzelne Route "/ api/Gästebuch/Gästebuch /: id "und das sollte für alle Verben gut sein? – cnak2
@Paul - Ja, Sie haben Recht. Ich habe den Code zu meiner Antwort hinzugefügt. – jfriend00