2016-02-23 20 views
6

Uczę się, jak używać stosu MEAN i ćwiczyć robię sieć, która prosi o podanie imienia i nazwiska, adresu e-mail i kursu, który ostatnio zrobiłeś. Następnie przechowuje informacje do bazy danych. Nie mogę znaleźć błędu i być może jest to łatwe.Błąd składni: nieodebrany 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); 

i to jest 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); 

Dziękujemy! : D

EDIT: Przepraszam zapomniałem umieścić błąd:

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

Czy możesz również opublikować swój błąd? –

+0

Pytania dotyczące pomocy przy debugowaniu ("dlaczego ten kod nie działa?") Muszą zawierać pożądane zachowanie, konkretny problem lub błąd oraz najkrótszy kod niezbędny do odtworzenia go w samym pytaniu. Pytania bez wyraźnego stwierdzenia problemu nie są przydatne dla innych czytelników. Zobacz: [Jak utworzyć przykład minimalny, kompletny i sprawdzalny] (http://stackoverflow.com/help/mcve). –

+0

Yeah sorry cc/@The – xampla

Odpowiedz

10

Unexpected token jest komunikat o błędzie produkowane przez JSON.parse, więc jesteś

  1. informując serwer się spodziewać JSON i
  2. nie dostarczanie prawidłowego JSON.

To dlatego, że dostarczają Content-type: application/json nagłówek w żądaniu, ale jesteś dostarczanie forma typu urlencoded dane w swoim ciele jak name=foobar&course=baz&...

Wystarczy usunąć JSON Content-type więc serwer będzie poprawnie analizować ciało jako dane formularza.

+0

Rozumiem. Używam Postmana i to jest to, co robię: https://gyazo.com/20074774913ddf445538e62c562dcc2b Czy powinienem wstawić "imię" zamiast imienia? Ponieważ dostaję również błąd. – xampla

+0

@xampla Ah, w takim przypadku problem polega na wysyłaniu danych "x-www-form-urlencoded" sformatowanych jak "name = foobar & course = ....", ale z jakiegoś powodu aplikacja próbuje je przetworzyć jako JSON. Nie ustawiasz nagłówka 'Content-Type: application/json' w swojej prośbie, prawda? – apsillers

+0

https://gyazo.com/2c6ffc3a3f808c7760bafb937ea898fa w taki sposób? – xampla