简体   繁体   中英

Error: Route.get() requires callback functions but got a [object Undefined]

I'm working through a MEAN Stack book called "MEAN Web Development". It's been a great book so far, but I'm currently stuck. I've downloaded all the code they provide so I can double check my work and it seems all my code is correct. I've searched for similar errors and tried to implement versions of those errors, but nothing has worked yet. According to the error these are the files that are producing the error.

Another note, when I remove the code for the list function. Everything works fine with just the create function. But, as soon as I add in the list function again it breaks and gives me the error that Return.get() needs a callback. but got an undefined object.

users.server.controller

var User = require('mongoose').model('User');

exports.create = function(req, res, next) {
var user = new User(req.body);

user.save(function(err){
    if (err) {
        return next(err);
    } else {
        res.json(user);
    }
});
};


exports.list = function(req, res, next) {
User.find({}, function(err, users) {
    if (err) {
        return next(err);
    } else {
        res.json(users);
    }
});
};

users.server.routes

var users = require('../../app/controllers/users.server.controller');

module.exports = function(app) {
app.route('/users')
    .post(users.create)
    .get(users.list);
};

express.js

var config = require('./config'),
express = require('express'),
morgan = require('morgan'),
compress = require('compression'),
bodyParser = require('body-parser'),
methodOverride = require('method-override'),
session = require('express-session');


module.exports = function() {
var app = express();

if (process.env.NODE_ENV === 'development') {
    app.use(morgan('dev'));
} else if (process.env.NODE_ENV === 'production') {
    app.use(compress());
}
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());
app.use(methodOverride());

app.use(session({
    saveUninitialized: true,
    resave: true,
    secret: config.sessionSecret
}));

app.set('views', './app/views');
app.set('view engine', 'ejs');

require('../app/routes/index.server.routes.js')(app);
require('../app/routes/users.server.routes.js')(app);

app.use(express.static('./public'));

return app;
}

server.js

process.env.NODE_ENV = process.env.NODE_ENV || 'development';

var mongoose = require('./config/mongoose'),
    express = require('./config/express');

var db = mongoose();
var app = express();
app.listen(3000);
module.exports = app;

console.log('Server running at http://localhost:3000/');

错误信息

I'm going through the same book and got this same error.

It seems the app is looking for the exports.signout function that is never shown that should be written in app/controllers/users.server.controller.js

I just wrote it like this:

exports.signout = function(req, res, nest) {
};

And then it worked as expected.

Put your

var users = require('../../app/controllers/users.server.controller');

inside your module.exports method, like this:

module.exports = function(app) {

  var users = require('../../app/controllers/users.server.controller');

  app.route('/users')
    .post(users.create)
    .get(users.list);
};

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM