2016-02-23 20 views
6

Ich lerne, wie man den MEAN-Stack benutzt, und um zu üben, mache ich ein Web, das Sie nach Ihrem Namen, Ihrer E-Mail und einem Kurs fragt, den Sie kürzlich gemacht haben. Dann speichert es die Informationen in einem DB. Ich kann den Fehler nicht finden und ist vielleicht ein einfacher.SyntaxError: Unerwartetes Token n

var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 
var morgan = require('morgan'); 
var mongoose = require('mongoose'); 
var port = process.env.PORT || 8080; 
var Schema = mongoose.Schema; 
var User = require('./user'); 

app.use(bodyParser.urlencoded({ extended: true})); 
app.use(bodyParser.json()); 
mongoose.connect('mongodb://localhost'); 

app.use(morgan('dev')); 

var apiRouter = express.Router(); 
apiRouter.route('/') 
.post(function(req, res) { 
    var user = new User(); 
    user.name = req.body.name; 
    user.course = req.body.course; 
    user.mail = req.res.mail; 
    user.save(function(err) { 
     console.log(user.name); 
     res.json({ message: 'Thank you!'}); 
    }); 
}).get(function(req, res) { 
    User.find(function(err, users) { 
     if (err) res.send(err); 
     res.json(users); 
    }); 
    res.json({ message: 'YEAAAAHHHH!'}); 
}); 

app.use('/', apiRouter); 

app.listen(port); 
console.log('Magic happens on port' + port); 

Und das ist die user.js:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var UserSchema = new Schema({ 
    name: {type: String, required: true}, 
    course: {type: String, required: true}, 
    mail: {type: String, required: true} 
}); 

module.exports = mongoose.model('User', UserSchema); 

Thank you! : D

EDIT: sorry ich den Fehler setzen vergessen:

SyntaxError: Unexpected token n 
at parse (/Users/pingu/Documents/mean_project/node_modules/body-parser /lib/types/json.js:83:15) 
at /Users/pingu/Documents/mean_project/node_modules/body-parser/lib/read.js:116:18 
at invokeCallback (/Users/pingu/Documents/mean_project/node_modules/raw-body/index.js:262:16) 
at done (/Users/pingu/Documents/mean_project/node_modules/raw-body/index.js:251:7) 
at IncomingMessage.onEnd (/Users/pingu/Documents/mean_project/node_modules/raw-body/index.js:308:7) 
at emitNone (events.js:67:13) 
at IncomingMessage.emit (events.js:166:7) 
at endReadableNT (_stream_readable.js:905:12) 
at nextTickCallbackWith2Args (node.js:474:9) 
at process._tickCallback (node.js:388:17) 
+0

Können Sie auch Ihren Fehler posten? –

+0

Fragen, die Debugging-Hilfe suchen ("Warum funktioniert dieser Code nicht?") Müssen das gewünschte Verhalten, ein bestimmtes Problem oder einen Fehler und den kürzesten Code enthalten, der für die Reproduktion in der Frage erforderlich ist. Fragen ohne eine klare Problemstellung sind für andere Leser nicht nützlich. Siehe: [Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels] (http://stackoverflow.com/help/mcve). –

+0

Yeah sorry cc/@The – xampla

Antwort

10

Unexpected token wird eine Fehlermeldung von JSON.parse, hergestellt, so dass Sie

  1. erzählen Sie Ihren Server zu erwarten JSON sind, und
  2. liefert keinen gültigen JSON.

Dies ist, weil Sie einen Content-type: application/json Header in Ihrer Anfrage liefern, aber Sie liefern form Typ Urlencoded Daten in Ihrem Körper wie name=foobar&course=baz&...

einfach die JSON entfernen Content-type so wird Ihr Server den Körper richtig analysieren als Formulardaten.

+0

Ich sehe. Ich benutze Postman und das ist, was ich tue: https://gyazo.com/20074774913ddf445538e62c562dcc2b Also sollte ich "Name" anstelle von Namen setzen? Weil ich auch einen Fehler bekomme. – xampla

+0

@xampla Ah, in diesem Fall ist dein Problem, dass du 'x-www-form-urlencoded' Daten wie' name = foobar & course = .... 'sendest, aber aus irgendeinem Grund versucht deine App es als zu analysieren JSON. Sie setzen nicht die Überschrift 'Content-Type: application/json' in Ihrer Anfrage, oder? – apsillers

+0

https://gyazo.com/2c6ffc3a3f808c7760bafb937ea898fa so? – xampla

Verwandte Themen