SyntaxError:UNexpected token n

我正在学习如何使用MEAN堆栈,并练习我正在做一个网站,要求您提供您的姓名,电子邮件和最近完成的课程。 然后它将信息存储到数据库。 我找不到错误,也许是一个容易的错误。

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); 

这是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); 

谢谢! :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) 

Unexpected token是由JSON.parse产生的错误消息,所以你是

  1. 告诉你的服务器期待JSON和
  2. 不提供有效的JSON。

这是因为你在你的请求中提供了一个Content-type: application/json头部,但是你正在为你的身体提供表单types的urlencoded数据,比如name=foobar&course=baz&...

只需删除JSON Content-type以便服务器将表单数据正确地parsing正文。