错误:.post()需要回调函数但是[对象未定义]无法正常工作

时间:2016-01-18 11:30:29

标签: javascript node.js post routes

同一主题有几个问题,但我无法解决我的问题。

Error: Route.post() requires callback functions but got a [object Undefined]
at Route.(anonymous function) [as post] (/home/kevin/proyectoApp/node_modules/express/lib/router/route.js:196:15)
at EventEmitter.app.(anonymous function) [as post] (/home/kevin/proyectoApp/node_modules/express/lib/application.js:481:19)
at module.exports (/home/kevin/proyectoApp/app/rutas.js:7:5)
at Object.<anonymous> (/home/kevin/proyectoApp/index.js:21:26)
at Module._compile (module.js:398:26)
at Object.Module._extensions..js (module.js:405:10)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Function.Module.runMain (module.js:430:10)
at startup (node.js:141:18)
at node.js:1003:3

Index.js

var express=require('express');
var app=express();
var morgan=require('morgan')
var mongoose=require('mongoose');
var bodyParser=require('body-parser');
var methodOverride=require('method-override');

mongoose.connect('mongodb://localhost/local');


app.use(express.static(__dirname+'/public'));
app.use(morgan('dev'));
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())


//Endpoints
require('./app/rutas.js')(app);


var server=app.listen(3001,function () {
var host = "localhost";
var port = server.address().port;

console.log('servidor escuchando en http://%s:%s', host, port);});
module.exports=app;

rutas.js

var Controller=require('./controller.js');
var User=require('./models/user.js');

module.exports=function(app){

app.get('/user/all',Controller.Read);

app.put('/user/all/:todo_id',Controller.Update);

app.post('/user/all',Controller.Create);

app.delete('/user/all/todo_id',Controller.Delete);


app.get('/',function(req,res){
console.log("Este si carga");
res.sendFile('./public/index.html');
});
 }

user.js的

var mongoose=require('mongoose');
var Schema=mongoose.Schema;

var Schemausuario=new Schema({
nombre:String,
apellido:String,
username:{type:String,requiere:true,unique:true}
});

var User=mongoose.model('User',Schemausuario);

module.exports=User;

controller.js

var User=require('./models/user.js');

var Create=function (req,res){
var nombre=req.body.nombre;
var apellido=req.body.apellido;
var nick=req.body.username;
console.log("Datos"+nombre+apellido+nick);
User.create({
nombre:nombre,
apellido:apellido,
username:nick

},function(err,usr){

if( err) console.log("Error al crear el usuario");
else{
    console.log("Usuario creado correctamente");
}
});

User.find({},function(err,user){
if(err) console.log("Hay un error al buscar los usuarios");
else{
    console.log("Los usuarios encontrados son "+user)
       res.json(user);
            }        
});

};


var Read=function (req,res){

User.find({},function(err,user){
if(err) return console.log("error="+err);
else{
       res.json(user);
            }        
});
};



var Update=function(req,res){
User.update( {_id : req.params.todo_id},
                {$set:{nombre : req.body.nombre,apellido:    req.body.apellido, username: req.body.username}}, 
                function(err, persona) {
                    if (err)
                        res.send(err);

            // Obtine y devuelve todas las personas tras crear una de     ellas
            User.find(function(err, user) {
                if (err)
                    res.send("Ha habido un error"+err)
                console.log("Se va a enviar "+persona)
                res.json(user);
            });
        });
};


var Delete=function(req,res){

  User.remove({
    _id: req.params.todo_id
}, function(err, todo) {
    if(err){
        res.send("Hay un error hdp"+err);
    }
    else{
        console.log("Usuario eliminado correctamente")
    }
    });

    User.find({},function(err, todos) {
        if(err){
            res.send(err);
        }
        res.json(todos);
    });
};

module.exports={
Create:Create,
Update:Update,
Read:Read,
Delete:Delete
}

我使用版本“express”,“^ 4.13.3”

你可以帮帮我吗?谢谢。 我上传的任何其他细节都会被忽略。 我上传的任何其他细节都会被忽略。

13 个答案:

答案 0 :(得分:13)

而不是:

app.post('/user/all',Controller.Create);

您尝试:

app.post('/user/all', function(req, res){
  Controller.Create
});

答案 1 :(得分:1)

您只想念

  

module.exports =应用,   或您要导出的任何内容。这件事在我身上发生了很多次。

答案 2 :(得分:1)

您要确保检查导出和导入的拼写是否正确。另外,请确保您的中间件已正确导出和导入。

从共享的代码中,应将每个中间件分别导出为 exports.Createexports.Update等。通过这种方式设置导出,将可以以您当前访问它的方式对其进行访问,请查看您的Controller文件中的rutas.js变量。

答案 3 :(得分:1)

在我的情况下,这是由于文件中的循环依赖 - 文件 A 从文件 B 导入函数,但文件 B 从文件 A 导入函数。

答案 4 :(得分:1)

另一个案例,我遇到了。我正在从控制器导入一个名为

的方法
const { createTrade } = require(...)

但我也有

exports.createTrade = async (..) => { ...

在此文件的另一部分中,我从导入中引用了 createTrade,但它对使用exports.createTrade 还是导入的感到困惑。我不得不切换到

const controller = require(...)

controller.createTrade

答案 5 :(得分:0)

在我的情况下,这是因为我在路由器和控制器文件之间拼写错误。检查两者是否匹配,错误.POST() requires callback functions but got a [object Undefined]与实际问题无关。

答案 6 :(得分:0)

是的,Subburaj是正确的, 在app.js中实现

app.post('/sign', function (req, res) {
    LoginController.authenticate
});

这可以解决问题

答案 7 :(得分:0)

始终确保导出名称与导入名称相同

//Function Exported
exports.isAuthenticatedUser = catchAsyncErrors(async(req, res, next) => {
}


//Function Imported
const {isAuthenticatedUser} = require('../middlewares/auth');

答案 8 :(得分:0)

对我来说,这是一个简单而愚蠢的错字。

我有"%s"而不是module.export = {

答案 9 :(得分:0)

通常,当您错误地以错误的方式导入函数时出现此错误,或者可能是拼写错误 控制器路线都遇到了麻烦。

当我从控制器中导出一个很好的函数时遇到了这个问题。

exports.addCategory = (req,res) => {}

但是当我在做的路线中导入它时

const addCategory = require('../Controllers/Category')

代替

const {addCategory) = require('../Controllers/Category')

您在导入时看到addCategory周围的花括号 所以,我正在导入整个功能,这是错误的

答案 10 :(得分:0)

我遇到了同样的问题,我解决它的方式是我对每个帖子命令进行了评论,然后我一个一个地测试了所有帖子命令,并且在我检查 router 时的最后一个命令中,有一个错字错误,那就是那个函数没有被调用。

答案 11 :(得分:0)

我解决了这个问题

module.exports = new ExampleController();

只需添加 new

答案 12 :(得分:0)

就我而言,当我删除了 controller.js 文件中的一个函数但忘记在路由器定义中删除它时,我遇到了这个错误。

例如,

router.get('/', controller.getUsers);

所以,在上面的代码中,我删除了 controller.js 文件中的 getUsers() 函数,但我仍然在路由定义中使用它。所以在删除这个无用的路由后,问题就解决了。希望这个错误对某人有所帮助。