2016-05-20 4 views
0

Он работал раньше, я просто отключил имена «server/routes/api.js» на «server/routes/capture.js» И теперь он дает эту ошибку , Как это даёт undefinded?Mongodb | TypeError: Не удается прочитать свойство «post» of undefined

В этом вся ошибка:

/home/ubuntu/workspace/server/routes/capture.js:3 
    router.post('/captures', function(req, res){ 
     ^

TypeError: Cannot read property 'post' of undefined 
    at module.exports (/home/ubuntu/workspace/server/routes/capture.js:3:11) 
    at Object.<anonymous> (/home/ubuntu/workspace/server.js:31:35) 
    at Module._compile (module.js:409:26) 
    at Object.Module._extensions..js (module.js:416:10) 
    at Module.load (module.js:343:32) 
    at Function.Module._load (module.js:300:12) 
    at Function.Module.runMain (module.js:441:10) 
    at startup (node.js:139:18) 
    at node.js:968:3 

Мой код:

сервера/маршруты/capture.js

var Capture = require('../models/capture'); 
module.exports = function(router) { 
    router.post('/captures', function(req, res){ 
     var capture = new Capture(); 
     capture.birdname = req.body.birdname; 
     capture.place.city = req.body.place.city; 
     capture.place.country = req.body.place.country; 

     capture.save(function(err, data){ 
      if(err) 
       throw err; 
      console.log(req.body); 
      res.json(data); 
     }); 
    }); 

    router.get('/captures', function(req, res){ 
     Capture.find({}, function(err, data){ 
      res.json(data); 
     }); 
    }); 

    router.delete('/captures', function(req, res){ 
     Capture.remove({}, function(err){ 
      res.json({result: err ? 'error' : 'ok'}); 
     }); 
    }); 

    router.get('/captures/:id', function(req, res){ 
     Capture.findOne({_id: req.params.id}, function(err, data){ 
      res.json(data); 
     }); 
    }); 

    router.delete('/captures/:id', function(req, res){ 
     Capture.remove({_id: req.params.id}, function(err){ 
      res.json({result: err ? 'error' : 'ok'}); 
     }); 
    }); 

    router.post('/captures/:id', function(req, res){ 
     Capture.findOne({_id: req.params.id}, function(err, data){ 
      var capture = data; 
      capture.birdname = req.body.birdname; 
      capture.place.city = req.body.place.city; 
      capture.place.country = req.body.place.country; 

      capture.save(function(err, data){ 
       if(err) 
        throw err; 
       res.json(data); 
      }); 
     }) 
    }) 
} 

сервера/модели/capture.js

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var captureSchema = mongoose.Schema({ 
    birdname: String, 
    place: { 
     city: String, 
     country: String 
    } 
}); 

module.exports = mongoose.model('Capture', captureSchema) 

server/config/database.js

module.exports = { 
    'url': "mongodb://[USERNAME]:[PASSWORD]@ds032579.mlab.com:32579/birdspotter" 
} 

server.js

// Init Express Web Framework 
var express = require('express'); 
var app = express(); 
var path = require('path'); 

// Set view engine to EJS & set views directory 
app.set('view engine', 'ejs'); 
app.set('views', path.resolve(__dirname, 'client', 'views')); 

app.use(express.static(path.resolve(__dirname, 'client'))); 

// Database Connection 
var mongoose = require('mongoose'); 
var configDB = require('./server/config/database.js'); 
mongoose.connect(configDB.url); 

var bodyParser = require('body-parser'); 
app.use(bodyParser.json()); 

// Main route 
app.get('/', function(req, res){ 
    res.render('index.ejs'); 
}); 

// API 
var api = express.Router(); 
require('./server/routes/capture')(api); 
app.use('/api', api); 

// Set routes to other pages 
app.get('/*', function(req, res){ 
    res.render('index.ejs'); 
}); 

// Port Settings 
app.listen(process.env.PORT || 3000, process.env.IP); 
console.log('Listening on port ' + process.env.PORT); 

ответ

0

Ваш вопрос в том, что ваш файл захвата не передается маршрут. Вы можете проверить, что с помощью маршрута ведения журнала консоли в вашем файле он будет возвращен undefined. Один из способов доступа к маршрутизатору в файле маршрута заключается в следующем:

в приложении:

var capture = require('./capture'); 
app.use('/capture', capture); 

в capture.js:

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

module.exports = function(alertService) { 

    router.use(sanitize.facilityIds); 

    router.post('/', function(req, res) { 
     // your code here 
    }); 
    return router; 
}; 
0

Это может быть проблема с findOne() функцией Монго. findOne() устарел в новых версиях Монго. Вместо этого попробуйте использовать: find().item(1)