Node.js SyntaxError:意外的令牌n

Node.js SyntaxError:意外的令牌n,node.js,mean-stack,Node.js,Mean Stack,我正在学习如何使用平均堆栈,并练习我正在做一个网络,询问你的姓名、电子邮件和你最近完成的课程。然后将信息存储到数据库中。我找不到错误,可能是个容易的错误 var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var morgan = require('morgan'); var mongoose = require('mongoose'); var port

我正在学习如何使用平均堆栈,并练习我正在做一个网络,询问你的姓名、电子邮件和你最近完成的课程。然后将信息存储到数据库中。我找不到错误,可能是个容易的错误

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)

意外标记
是由
JSON.parse
生成的错误消息,因此

  • 告诉服务器需要JSON,以及
  • 未提供有效的JSON
  • 这是因为您在请求中提供了
    Content-type:application/json
    头,但您在正文中提供了表单类型的URLCoded数据,如
    name=foobar&course=baz&…


    只需删除JSON
    内容类型
    ,您的服务器就可以将正文正确地解析为表单数据。

    您也可以发布错误吗?寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请看:。是的,对不起,我知道了。我用的是邮递员,我就是这么做的:那么我应该用“姓名”而不是“姓名”吗?因为我也遇到了一个错误。@xampla啊,在这种情况下,你的问题是你正在发送
    x-www-form-urlencoded
    格式类似
    name=foobar&course=..
    的数据,但出于某种原因,你的应用程序试图将其解析为JSON。您没有在请求中设置头
    内容类型:application/json
    ,是吗?@xampla是的,不要这样做,因为您没有发送json。如果你这么做了,那就是造成问题的原因。好的,但是现在当我尝试获取用户时,我发现这个错误与之相关headers@xampla这是因为您调用了两次
    res.json
    ,但是
    res.json
    完成了HTTP响应(因此您不能调用它两次,因为在第二次调用时,响应已经完成。)这是一个完全独立的问题,只需在每次执行
    .get
    处理程序时不多次调用
    res.json
    即可解决。