2016-08-06 27 views
0

Ich habe Probleme mit meinen beiden Routen und das Abrufen/Speichern der Daten mit mongodb. Es scheint Validierungsfehler beim Speichern oder möglicherweise nicht JSON zu veröffentlichen. Irgendwelche Ideen?MEAN-Stack - GET und POST keine Abfrage oder Speichern zu mongodb

Hier ist mein Mungo Schema:

// grab the things we need 
var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

// create a schema 
var sitesEntrySchema = new Schema({ 
    ip: { 
     type: String, 
     required: true, 
     trim: true 
    }, 
    domain: { 
     type: String, 
     required: true, 
     trim: true 
    }, 
    wp: { 
     type: String, 
     required: true, 
     trim: true 
    }, 
    host_name: { 
     type: String, 
     required: true 
    }, 
    hosted: { 
     type: Number, 
     required: true 
    } 
}); 

// make this available to our users in our Node applications 
var Site = mongoose.model('Site', sitesEntrySchema); 
module.exports = Site; 

Und meine Winkel http Anfrage

var app = angular.module('myApp', []); 

app.controller('MainCtrl', function($scope, $http) { 
    $http.get('/api/mongo') 
    .then(function(response) { 
     console.log(response.data); 
     $scope.myData = response.data; 
    }); 
}); 

app.controller('FormCtrl', function($scope, $http) { 
    $scope.formData = {}; 

    $scope.addSite = function() { 
     $http.post('/api/create', $scope.formData) 
      .success(function(data) { 
       console.log($scope.formData); 
       $scope.formData = {}; // clear the form so our user is ready to enter another 
       swal(
        'Good job!', 
        'Site was added!', 
        'success' 
       ); 
      }) 
      .error(function(data) { 
       console.log('Error: ' + data); 
      }); 
    }; 
}); 

Meine express Routen:

var express = require('express'); 
var router = express.Router(); 
var Site = require('../models/site'); 

//Return From Mongo 
router.get('/api/mongo', function(req, res) { 
    Site.find({}, function(err, sites) { 
    if (err) 
     res.send(err) 
    res.send(sites); 
    }); 
    //res.json({"yo": "yo this shit works"}); 
}); 

//Add A Site 
router.post('/api/create', function(req, res, next) { 
    //create object with form input 
    var siteData = { 
     ip: req.body.ip, 
     domain: req.body.domain, 
     wp: req.body.wp, 
     host_name: req.body.host_name, 
     hosted: req.body.hosted 
    }; 

    // use schema's 'create' method to insert doc into mongo 
    Site.create(siteData, function(error) { 
     if (error) { 
     //return next(error); 
     res.send(error); 
     } else { 
     return res.json({ message: 'Site added!' }); 
     } 
    }); 
}); 

Antwort

0

Ohne spezifische Ausgänge, die zeigen, was falsch läuft, hier sind ein paar Dinge, die für mich herausragen. Der erste antwortet nicht immer mit json. Sie sollten auch versuchen, next() zu verwenden, um Ihre Fehler zu behandeln, da Express sicherstellt, dass eine korrekte Fehlerantwort gesendet wird. Mit diesen Änderungen sieht Ihre Route planen wie:

//Return From Mongo 
router.get('/api/mongo', function(req, res, next) { 
    Site.find({}, function(err, sites) { 
    if (err) { 
     next(err) 
    } else { 
     return res.json(sites); 
    } 
    }); 

}); 

Zweitens Es empfiehlt sich, die neu erstellte Ressource zurück, so dass Ihre schaffen Route wie

//Add A Site 
router.post('/api/create', function(req, res, next) { 
    //create object with form input 
    var siteData = { 
     ip: req.body.ip, 
     domain: req.body.domain, 
     wp: req.body.wp, 
     host_name: req.body.host_name, 
     hosted: req.body.hosted 
    }; 

    // use schema's 'create' method to insert doc into mongo 
    Site.create(siteData, function(error, site) { 
     if (error) { 
     next(error); 
     } else { 
     return res.json(site); 
     } 
    }); 
}); 

Zusätzlich aussehen sollte, je nach Version von Angular verwenden Sie möglicherweise die verpasste Versprechenssyntax für die Postanforderung. Sie sollten .then(), nicht .success() und .error() verwenden. Dies könnte auch ein Problem verursachen.

Schließlich sollten Sie Ihr Bestes versuchen, den REST-Richtlinien für Ihre Routen und Antworten zu folgen. Es wird es viel einfacher machen, Ihre Web-App zu erweitern und wird Sie besser organisieren. Hier ist eine gute Express/Knoten-Ressource für diese https://scotch.io/tutorials/build-a-restful-api-using-node-and-express-4.

ADDED: Hier ist ein Beispiel dafür, wie Sie Ihre Fehler je nach Produktion/Entwicklungsumgebungen

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
    console.log('err:', err.status, err.message); 
    res.status(err.status || 500); 
    res.json({message: err.messages}); 
    }); 
} 

// 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: {} 
    }); 
}); 
+0

Dank @peaches anmelden können! Ich habe meinen Code aufgeräumt, um Ihren Vorschlägen zu entsprechen, und ich kann jetzt Dokumente erstellen, kann aber immer noch nicht von der Datenbank abholen. Wie kann ich das Fehlerobjekt anzeigen, wenn es in next (err) ist? – Calrocks

+0

@Calrocks Ich nehme an, dass Sie Ihren Server in Entwicklung, wahrscheinlich auf localhost ausführen? Sehen Sie sich die Ergänzungen zu meiner Antwort an, wie Sie die Fehler gut protokollieren können. Wenn sie lokal ausgeführt werden, sollten sie überall dort ausgedruckt werden, wo der Server ausgeführt wird. – peaches