2016-10-29 36 views
0

很新,表達和我創建了一個使用來自MongoDB的ObjectID(/報告/:id)的單個記錄的路由。打開路由給我一個「無法獲取/報告/ ObjectID」。 路由器文件如下:ExpressJs路由返回一個不能GET錯誤

'use strict'; 
var express = require('express'); 
var reportRouter = express.Router(); 
var mongoose = require('mongoose'); //for mongodb connection 
var mongodb = require('mongodb').MongoClient; 
var bodyParser = require('body-parser'); //parses information from POST 
var methodOverride = require('method-override'); //manipulates POST data 
var ObjectID = require('mongodb').ObjectID; 

//set up routes starting with '/reports' 
var router = function() { 
    //noinspection JSLint 
    //configure server routing and build nav bar for each view 

    //route for listing all reports 
    reportRouter.route('/') 
    //GET all theft reports 
     .get(function (req, res) { 
      var url = 'mongodb://localhost:27017/thefts'; 
      mongodb.connect(url, function (err, db) { 
       var collection = db.collection('thefts'); 
       collection.find({}).toArray(function (err, results) { 
        if (err) { throw err; } 
        res.render('viewReports', { 
         title: 'Theft Reporting App :: Theft reports', 
         nav: [{Link: '/', Text: 'Home'}, {Link: '/report', Text: 'Report a theft'}, { 
          Link: '/dashboard', 
          Text: 'Dashboard' 
         }], 
         theftList: results 
        }); 
        db.close(); 
       }); 
      }); 
     }); 

    reportRouter.route('/:id') 
     .get(function (req, res) { 
      var id = new ObjectID(req.params.id); 
      var url = 'mongodb://localhost:27017/thefts'; 
      mongodb.connect(url, function (err, db) { 
       var collection = db.collection('thefts'); 
       collection.findOne({_id: id}, function (err, results) { 
        if (err) { throw err; } 
        res.render('viewSingleReport', { 
         title: 'Theft Reporting App :: Theft reports', 
         nav: [{Link: '/', Text: 'Home'}, {Link: '/report', Text: 'Report a theft'}, { 
          Link: '/dashboard', Text: 'Dashboard'}], 
         theft: results 
        }); 
       }); 
      }); 
     }); 
     //all requests to these routes must pass thru use methods on next three lines 
    reportRouter.use(bodyParser.json()); //add body parser support for json encoded bodies 
    reportRouter.use(bodyParser.urlencoded({extended: true})); //add support for urlencoded bodies (form data) 
    reportRouter.use(methodOverride(function (req, res) { 
     if (req.body && typeof req.body === 'object' && '_method' in req.body) { 
      // look in urlencoded POST bodies and delete it 
      var method = req.body._method; 
      delete req.body._method; 
      return method; 
     } 
    })); 

    reportRouter.route('/update') 
     .get(function (req, res) { 
      res.render('updateReport', {title: 'Theft Reporting App :: Dashboard', nav: 
       [{Link: '#', Text: 'Home'}, {Link: '/report', Text: 'Report a theft'}, {Link: '/dashboard', Text: 'Dashboard'}]}); 
     }); 
    reportRouter.route('/delete') 
     .get(function (req,res) { 
      res.render('users', {title: 'Theft Reporting App :: Dashboard', nav: 
       [{Link: '#', Text: 'Home'}, {Link: '/report', Text: 'Report a theft'}, {Link: '/dashboard', Text: 'Dashboard'}]}); 
     }); 

    return reportRouter; 
}; 

module.exports = reportRouter; 

的app.js文件如下:

'use strict'; 

var express = require('express'); 
var app = express(); 
var mongojs = require('mongojs'); 
var db = mongojs('thefts', ['thefts']); 
//var bodyParser = require('body-parser'); 
//var passport = require('passport'); 
var session = require('express-session'); 
var mongoose = require('mongoose'); 
var mongodb = require('mongodb').MongoClient; 

//noinspection JSLint 

var port = process.env.PORT || 3005; 
// pull in routers 
var reportRouter = require('./src/routes/reportRoutes'); 
var dashRouter = require('./src/routes/dashRoutes'); 
var auth = require('./src/routes/auth'); 
var users = require('./src/routes/users'); 

//pull in static assets by their folders 
app.use(express.static('public')); 
app.set('views', './src/views'); 
app.set('view engine', 'ejs'); 

//add passport framework (OAuth) 
//passport works with express.session() - which takes a secret response 
app.use(session({ 
    secret: 'stuff', 
    resave: 'true', 
    saveUninitialized: 'true' 
})); 

/* 
* This section sets up the routes 
*/ 
app.use('/report', reportRouter); 
app.use('/login', auth); 
app.use('/dashboard', dashRouter); 
app.use('/users', users); 

app.get('/', function (req ,res) { 
    res.render('index',{title: 'Theft Reporting App :: Home', nav: 
     [{Link: '/', Text: 'Home'}, {Link: '/report', Text: 'Report a theft'}, {Link: '/dashboard', Text: 'Dashboard'}]}); 
}); 
app.get('/report', function (req, res) { 
    var url = 'mongodb://localhost:27017/thefts'; 
    mongodb.connect(url, function (err, db) { 
     if (err) { throw err; } 
     var collection = db.collection('thefts'); 
     collection.find().toArray(function (err, results) { 
      res.render('viewReports', { 
       title: 'Theft Reporting App :: Theft reports', 
       nav: [{Link: '/', Text: 'Home'}, {Link: '/report', Text: 'Report a theft'}, { 
        Link: '/dashboard', 
        Text: 'Dashboard' 
       }], 
       theftList: results 
      }); 
      db.close(); 
     }); 
    }); 
}); 

//route for listing all reports 
reportRouter.route('/') 
//GET all theft reports 
    .get(function (req, res) { 
     var url = 'mongodb://localhost:27017/thefts'; 
     mongodb.connect(url, function (err, db) { 
      var collection = db.collection('thefts'); 
      collection.find({}).toArray(function (err, results) { 
       if (err) { throw err; } 
       res.render('viewReports', { 
        title: 'Theft Reporting App :: Theft reports', 
        nav: [{Link: '/', Text: 'Home'}, {Link: '/report', Text: 'Report a theft'}, { 
         Link: '/dashboard', 
         Text: 'Dashboard' 
        }], 
        theftList: results 
       }); 
       db.close(); 
      }); 
     }); 
    }); 

app.get('/dashboard', function (req, res) { 
    res.render('dashboard', { 
     title: 'Theft Reporting App :: Dashboard', 
     nav: [{Link: '/', Text: 'Home'}, {Link: '/report', Text: 'Report a theft'}, { 
      Link: '/dashboard', 
      Text: 'Dashboard' 
     }] 
    }); 
}); 

app.get('/login', function (req, res) { 
    res.render('login', {title: 'Theft Reporting App :: Login', nav: [ 
     {Link: '/', Text: 'Home'}, {Link: '/report', Text: 'Report a theft'}, {Link: '/dashboard', Text: 'Dashboard'} 
    ]}); 
}); 

require('./config/passport')(app); 

/*Database connections*/ 
var db = mongoose.connect('mongodb://localhost:27017/thefts'); 

//connect to database 
var router = function() { 
    reportRouter.route('/addReport', function (req, res) { 
     var url = 'mongodb://localhost:27017/thefts'; 
     mongodb.connect(url, function(err, db) { 
      if (err) { throw err; } 
      var collection = db.collection('thefts'); 
      collection.insertMany(theftReports, function(err, results) { 
       res.send(results); 
       db.close(); 
      }); 
     }); 
    }); 
}; 
//have server listen on the specified port 
app.listen(port, function (err) { 
    console.log('Running server on port ' + port); 
}); 

也許簡單的東西。有任何想法嗎?

+0

您是否嘗試過與調試代碼[Visual Studio代碼(http://code.visualstudio.com/)? visual studio代碼的nodejs調試器是最好的之一。這個答案雖然屬於題外話題:「爲什麼這段代碼不起作用?」。沒有指定問題或期望行爲的隨機非工作代碼是無關緊要的。 – Marcs

回答

0

在閱讀您的代碼並且未經測試之後,您似乎正在根據docs將應用程序設置爲使用它們之後,定義您的路線爲app.get('/report', function (req, res) {});

在app.js中定義您的路線之後,嘗試擁有app.use()方法。

Expressjs可能會在代碼中定義它們之前嘗試裝入路由。

app.js

'use strict'; 

var express = require('express'); 
var app = express(); 
var mongojs = require('mongojs'); 
var db = mongojs('thefts', ['thefts']); 
//var bodyParser = require('body-parser'); 
//var passport = require('passport'); 
var session = require('express-session'); 
var mongoose = require('mongoose'); 
var mongodb = require('mongodb').MongoClient; 

//noinspection JSLint 

var port = process.env.PORT || 3005; 
// pull in routers 
var reportRouter = require('./src/routes/reportRoutes'); 
var dashRouter = require('./src/routes/dashRoutes'); 
var auth = require('./src/routes/auth'); 
var users = require('./src/routes/users'); 

//pull in static assets by their folders 
app.use(express.static('public')); 
app.set('views', './src/views'); 
app.set('view engine', 'ejs'); 

//add passport framework (OAuth) 
//passport works with express.session() - which takes a secret response 
app.use(session({ 
    secret: 'stuff', 
    resave: 'true', 
    saveUninitialized: 'true' 
})); 

/* 
* This section sets up the routes 
*/ 
app.get('/', function (req ,res) { 
    res.render('index',{title: 'Theft Reporting App :: Home', nav: 
     [{Link: '/', Text: 'Home'}, {Link: '/report', Text: 'Report a theft'}, {Link: '/dashboard', Text: 'Dashboard'}]}); 
}); 
app.get('/report', function (req, res) { 
    var url = 'mongodb://localhost:27017/thefts'; 
    mongodb.connect(url, function (err, db) { 
     if (err) { throw err; } 
     var collection = db.collection('thefts'); 
     collection.find().toArray(function (err, results) { 
      res.render('viewReports', { 
       title: 'Theft Reporting App :: Theft reports', 
       nav: [{Link: '/', Text: 'Home'}, {Link: '/report', Text: 'Report a theft'}, { 
        Link: '/dashboard', 
        Text: 'Dashboard' 
       }], 
       theftList: results 
      }); 
      db.close(); 
     }); 
    }); 
}); 

//route for listing all reports 
reportRouter.route('/') 
//GET all theft reports 
    .get(function (req, res) { 
     var url = 'mongodb://localhost:27017/thefts'; 
     mongodb.connect(url, function (err, db) { 
      var collection = db.collection('thefts'); 
      collection.find({}).toArray(function (err, results) { 
       if (err) { throw err; } 
       res.render('viewReports', { 
        title: 'Theft Reporting App :: Theft reports', 
        nav: [{Link: '/', Text: 'Home'}, {Link: '/report', Text: 'Report a theft'}, { 
         Link: '/dashboard', 
         Text: 'Dashboard' 
        }], 
        theftList: results 
       }); 
       db.close(); 
      }); 
     }); 
    }); 

app.get('/dashboard', function (req, res) { 
    res.render('dashboard', { 
     title: 'Theft Reporting App :: Dashboard', 
     nav: [{Link: '/', Text: 'Home'}, {Link: '/report', Text: 'Report a theft'}, { 
      Link: '/dashboard', 
      Text: 'Dashboard' 
     }] 
    }); 
}); 

app.get('/login', function (req, res) { 
    res.render('login', {title: 'Theft Reporting App :: Login', nav: [ 
     {Link: '/', Text: 'Home'}, {Link: '/report', Text: 'Report a theft'}, {Link: '/dashboard', Text: 'Dashboard'} 
    ]}); 
}); 

require('./config/passport')(app); 

/*Database connections*/ 
var db = mongoose.connect('mongodb://localhost:27017/thefts'); 

//connect to database 
var router = function() { 
    reportRouter.route('/addReport', function (req, res) { 
     var url = 'mongodb://localhost:27017/thefts'; 
     mongodb.connect(url, function(err, db) { 
      if (err) { throw err; } 
      var collection = db.collection('thefts'); 
      collection.insertMany(theftReports, function(err, results) { 
       res.send(results); 
       db.close(); 
      }); 
     }); 
    }); 
}; 

app.use('/report', reportRouter); 
app.use('/login', auth); 
app.use('/dashboard', dashRouter); 
app.use('/users', users); 

//have server listen on the specified port 
app.listen(port, function (err) { 
    console.log('Running server on port ' + port); 
});