2016-02-23 20 views
6

Tôi đang tìm hiểu cách sử dụng ngăn xếp MEAN và thực hành tôi đang thực hiện một web hỏi tên bạn, email của bạn và một khóa học bạn đã thực hiện gần đây. Sau đó, nó lưu trữ thông tin cho một DB. Tôi không thể tìm thấy lỗi và có thể là một lỗi dễ dàng.Cú phápError: Mã thông báo không mong muốn 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); 

Và đây là 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); 

Cảm ơn bạn! : D

EDIT: xin lỗi tôi quên đặt các lỗi:

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

Bạn cũng có thể đăng lỗi của mình không? –

+0

Câu hỏi tìm kiếm trợ giúp gỡ lỗi ("tại sao mã này không hoạt động?") Phải bao gồm hành vi mong muốn, một vấn đề hoặc lỗi cụ thể và mã ngắn nhất cần thiết để tái tạo nó trong chính câu hỏi đó. Các câu hỏi không có tuyên bố rõ ràng về vấn đề không hữu ích cho người đọc khác. Xem: [Cách tạo một ví dụ tối thiểu, đầy đủ và có thể xác minh được] (http://stackoverflow.com/help/mcve). –

+0

Vâng xin lỗi cc/@The – xampla

Trả lời

10

Unexpected token là một thông báo lỗi được sản xuất bởi JSON.parse, vì vậy bạn là

  1. nói máy chủ của bạn để mong đợi JSON, và
  2. không cung cấp JSON hợp lệ.

Điều này là do bạn cung cấp một tiêu đề Content-type: application/json trong yêu cầu của bạn, nhưng bạn đang cung cấp hình thức kiểu urlencoded dữ liệu trong cơ thể của bạn như name=foobar&course=baz&...

Đơn giản chỉ cần loại bỏ các JSON Content-type để máy chủ của bạn sẽ phân tích cơ thể một cách chính xác dưới dạng dữ liệu biểu mẫu.

+0

Tôi hiểu. Tôi đang sử dụng Postman và đây là những gì tôi làm: https://gyazo.com/20074774913ddf445538e62c562dcc2b Vì vậy, tôi nên đặt "tên" thay vì tên? Vì tôi cũng gặp lỗi. – xampla

+0

@xampla Ah, trong trường hợp đó, vấn đề của bạn là bạn đang gửi dữ liệu 'x-www-form-urlencoded' được định dạng như' name = foobar & course = .... 'nhưng vì lý do nào đó, ứng dụng của bạn đang cố phân tích cú pháp đó JSON. Bạn không đặt tiêu đề 'Content-Type: application/json' trong yêu cầu của bạn, phải không? – apsillers

+0

https://gyazo.com/2c6ffc3a3f808c7760bafb937ea898fa như vậy? – xampla

Các vấn đề liên quan