2016-07-01 7 views
1

Ich bin sehr neu und habe durch die Archive geschaut, aber was in diesem Code vor sich geht, entzieht sich mir. Ich habe Express-Generator verwendet, um eine Kalender-App zu erstellen und möchte sie jetzt mit MongoDB verbinden. Die Verbindung zu Mongo funktioniert, aber ich kann kein Dokument speichern.Mungo: .save ist keine Funktion

Der relevante Teil meiner global.js (wo ich meine Front-End Javascript renne) sieht wie folgt aus:

$(document).ready(function() { 

var ev = new Event({ date: "a6_13_2016", time: 900, description:"Fencing"}); 
    ev.save(function(err) { 
     if (err) console.log(err); 
     else console.log("Success!") 
    }) 

Dies ist, wo ich die „Typeerror bin immer: ev. Speichern ist keine Funktion "Nachricht. Meine Modelle/Events.js sieht wie folgt aus:

var mongoose = require('mongoose'); 

var eventSchema = new mongoose.Schema({ 
    date: String, 
    time: Number, 
    description: String 
}); 

module.exports = mongoose.model('Event', eventSchema); 

Meine Routen/events.js wie folgt aussieht:

var express = require('express'); 
var router = express.Router(); 

var mongoose = require('mongoose'); 
var Event = require('../models/Events.js'); 

/* GET /event listing. */ 
router.get('/', function(req, res, next) { 
    Event.find(function (err, dates) { 
    if (err) return next(err); 
    res.json(dates); 
    }); 
}); 

/*POST event*/ 
router.post('/', function(req, res, next) { 
    Event.create(req.body, function (err, post) { 
    if (err) return next(err); 
    res.json(post); 
    }); 
}); 

/* GET /event/id */ 
router.get('/:id', function(req, res, next) { 
    Event.findById(req.params.id, function (err, post) { 
    if (err) return next(err); 
    res.json(post); 
    }); 
}); 

module.exports = router; 

Ich möchte etwas zu retten, es zu testen, aber es gibt me“.save ist keine Funktion. Anders als

var events = require('./routes/events'); 
app.use('/events', events); 

und der Code zur Gründung der Mongoose Verbindung mein app.js Datei ist Standard. Was denkst du ist das Problem?

+1

Sie betreiben Mungo vom Front-End? – NatureShade

+0

['Event'] (https://developer.mozilla.org/en-US/docs/Web/API/Event) ist ein global, das bereits in Browsern existiert. Auch wenn Sie nicht sicher sind, warum Sie Mungo-Kram im Frontend verwenden, werden Sie wahrscheinlich nur eine AJAX-Anfrage senden wollen, um Daten von Ihrem Client an Ihren Server zu senden, und dann einfach den Mungo-Kram auf der Serverseite erledigen. – saadq

Antwort

0

Sind Sie sicher, dass Linie

var Event = require('../models/Events.js'); 

den richtigen Pfad hat?

Sie erstellen ein EV-Objekt von Event-Funktion und es scheint, dass ev undefiniert ist, nach der Fehlerbeschreibung zu urteilen.

Wenn Ihre Ereignisdatei nicht richtig geladen ist, haben Sie keinen Zugriff auf die .save-Funktion.

3

Ich sehe

$(document).ready(function() { 

Sie Mungo Versuchst in Browser zu benutzen?

Es soll auf der Serverseite verwendet werden.

In Browser benötigen Sie AJAX-Request an den Server senden:

$('#save').click(function() { 
    $.post('/event', function(response) { console.log(reposne) }) 
}); 

Auf dem Server sollten Sie eine Route hinzufügen, die Ihre AJAX-Anforderung bearbeiten und innerhalb dieser Route können Sie Ihr Modell speichern:

router.post('/event', function(req, res) { 
    var ev = new Event({ date: "a6_13_2016", time: 900, description:"Fencing"}); 
    ev.save(function(err) { 
     if (err) console.log(err); 
     else console.log("Success!") 
    }) 
}); 

Bitte beachten Sie, dass Sie nicht den 3. Parameter als nächstes in Ihren Rotues benötigen. Es wird nur in den folgenden Artikeln verwendet: