2015-05-28 49 views
0

當我嘗試在這種情況下,與郵遞員鉻插件來創建一個新的「飛行」,我得到以下錯誤:語法錯誤時的請求,使用節點,Bodyparser,和MongoDB

SyntaxError: Unexpected token d 
at Object.parse (native) 
at parse (D:\data\coding\nodeprojects\flightlog\fl-server\node_modules\body-parser\lib\types\json.js:84:17) 
at D:\data\coding\nodeprojects\flightlog\fl-server\node_modules\body-parser\lib\read.js:102:18 
at done (D:\data\coding\nodeprojects\flightlog\fl-server\node_modules\body-parser\node_modules\raw-body\index.js:248:14) 
at IncomingMessage.onEnd (D:\data\coding\nodeprojects\flightlog\fl-server\node_modules\body-parser\node_modules\raw-body\index.js:294:7) 
at IncomingMessage.g (events.js:199:16) 
at IncomingMessage.emit (events.js:104:17) 
at _stream_readable.js:908:16 
at process._tickCallback (node.js:355:11 

貓鼬型號

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

var FlightSchema = new Schema({ 
    created: { 
     type: Date, 
     default: Date.now 
    }, 
    date: Date, 
    registration: String, 
    pic: String, 
    pnf: String, 
    departure: String, 
    arrival: String, 
    takeOff: String, 
    landing: String, 
    landingCount: Number, 
    remarks: String 
}); 

FlightSchema.statics = { 
    load: function (id, cb) { 
     this.findOne({ 
      _id: id 
     }).exec(cb); 
    } 
}; 

mongoose.model('Flight', FlightSchema); 

控制器:

require('../models/flight'); 
var mongoose = require('mongoose'); 
var Flight = mongoose.model("Flight"); 

exports.post = function (req, res) { 
    var flight = new Flight(req.body); 
    flight.save(); 
    res.jsonp(flight); 
}; 

exports.get = function (req, res) { 
    Flight.find().exec(function (err, flights) { 
     res.jsonp(flights) 
    }); 
}; 

路線

var express = require('express'); 
var router = express.Router(); 

var flightsController = require('../controllers/flightsController'); 

/* POST /flights */ 
router.post('/', flightsController.post); 

// GET /flights/ 
router.get('/', flightsController.get); 

app.js

var express = require('express'); 
var path = require('path'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
//var cors = require('cors'); 

var users = require('./routes/users'); 
var flights = require('./routes/flights'); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

var mongoose = require('mongoose'); 

mongoose.connect('mongodb://localhost/flightlog'); 
var db = mongoose.connection; 

db.on('error', function callback() { 
    console.log("MongoDB connection failed"); 
}); 

db.once('open', function callback() { 
    console.log("Successfully connected"); 
}); 

//app.use(cors()); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded()); 
app.use(cookieParser()); 

app.use('/users', users); 
app.use('/flights', flights); 

/// catch 404 and forward to error handler 
app.use(function (req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

/// error handlers 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
    app.use(function (err, req, res, next) { 
     res.status(err.status || 500); 
     res.render('error', { 
      message: err.message, 
      error: err 
     }); 
    }); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function (err, req, res, next) { 
    res.status(err.status || 500); 
    res.render('error', { 
     message: err.message, 
     error: {} 
    }); 
}); 


module.exports = app; 

NPM開始作品沒有問題,但只要我發佈請求與郵差,看起來像:

POST /flights HTTP/1.1 
Host: localhost:3000 
Content-Type: application/json 
Cache-Control: no-cache 

{ date: "2015-01-01 14:00", registration: "ABC123", pic: "J. Cash", pnf: "J. Carter", departure: "KJFK", arrival: "KLAX", takeOff: "2015-01-01 14:00", landing: "2015-01-01 14:30", landingCount: 1, remarks: "" } 

我得到上面提到的錯誤400。有人可以給我一個提示嗎?我迷路了。

+0

東西顯然與您bodyparser。你能否以某種方式進入該代碼,或者至少查看'body-parser \ lib \ types \ json.js:84:17'來放置一些日誌並查看傳入的內容是否導致它拋出? –

回答

2

你需要更新你的代碼在控制器

require('../models/flight'); 
var mongoose = require('mongoose'); 
var Flight = mongoose.model("Flight"); 

// in controller post action code is updated ******************* 
exports.post = function (req, res,next) { 
    var flight = new Flight(req.body); 
    flight.save(function(err, result){ 

if(!err) 
{ 
res.json(201,result); 
}else 
{ 

next(err); 
} 


}); 

}; 

exports.get = function (req, res) { 
    Flight.find().exec(function (err, flights) { 
     res.jsonp(flights) 
    }); 
}; 

在郵遞員如果你讓POST請求意味着

X WWW的形式,進行了urlencoded手段不通過內容類型:應用程序/ JSON在報頭值

,如果你想通過原甲酸手段(在郵遞員第三個選項卡)

header Content-Type : "application/json" 

in raw content 


{ 
"field":"value" 

} 

example 

{ 

"firstName":"David", 
"lastName":"S" 

} 

在您的要求

{ date: "2015-01-01 14:00", registration: "ABC123", pic: "J. Cash", pnf: "J. Carter", departure: "KJFK", arrival: "KLAX", takeOff: "2015-01-01 14:00", landing: "2015-01-01 14:30", landingCount: 1, remarks: "" } 

應該

{ "date": "2015-01-01 14:00", "registration": "ABC123", "pic": "J. Cash", pnf: "J. Carter", "departure": "KJFK", "arrival": "KLAX",.............} 

日期應該是JSON數據甲酸

+0

令人難以置信。但是我在Post-Request中沒有看到缺少的引號。由於在npm控制檯中缺少適當的錯誤信息,我感到非常困惑。很好看!謝謝 :) – julian