ExpressJs路由返回一个无法GET错误

时间:2016-10-29 13:19:24

标签: node.js mongodb express

表达非常新,我使用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);
});

可能简单。有什么想法吗?

1 个答案:

答案 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);
});