表达非常新,我使用MongoDB的ObjectID(/ report /:id)创建了一条到单条记录的路径。打开路线给我一个"无法获取/报告/ ObjectID"。 路由器文件如下:
'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 :(得分: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);
});