Javascript 错误:.post()需要回调函数,但得到的[object Undefined]无法工作

Javascript 错误:.post()需要回调函数,但得到的[object Undefined]无法工作,javascript,node.js,post,routes,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 functi

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

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
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”

你能帮我吗?谢谢 我上传的任何其他细节都会被忽略。 我将上载的任何其他详细信息都会被忽略。

而不是此:

app.post('/user/all',Controller.Create);
您尝试:

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

在我的情况下,这是因为我有一个路由器和控制器之间的文件拼写错误。检查两者,使其匹配,错误
。POST()需要回调函数,但得到一个[object Undefined]
与实际问题无关。

您只缺少了

module.exports=app, 或者你出口的任何东西。这件事在我身上发生过很多次

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

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


这可以解决问题

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

//已导出函数
exports.isAuthenticatedUser=catchAsyncErrors(异步(请求、恢复、下一步)=>{
}
//功能导入

const{isAuthenticatedUser}=require('../middleware/auth');
对我来说,这是一个简单而愚蠢的打字错误


我使用了
module.export={
而不是
module.exports={

此错误通常发生在您错误地导入函数时,或者可能是拼写错误 控制器路线都有故障

我在从控制器导出一个函数时遇到了这个问题,这一切都很好

exports.addCategory=(请求、回复)=>{}
但当我把它导入我正在做的路线时

const addCategory=require(“../Controllers/Category”)
反而

const{addCategory)=需要('../Controllers/Category')
您可以看到,导入时addCategory周围用大括号括起
因此,我导入了整个函数,这是错误的

您要确保检查导出和导入的拼写是否正确。还要确保正确导出和导入了中间件

从共享的代码中,您应该将每个中间件单独导出为
exports.Create
exports.Update
等。以这种方式设置导出将使您能够以当前访问它的方式访问它查看
rutas.js
文件中的
控制器
变量。

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

我遇到了另一种情况。我从控制器导入了一个名为

const { createTrade } = require(...)
但我也有

exports.createTrade = async (..) => { ...
在该文件的另一部分中,我从导入中引用了createTrade,但它对使用exports.createTrade或导入的文件感到困惑

const controller = require(...)

controller.createTrade

我遇到了同样的问题,我解决问题的方法是,我确实对每个post命令进行了注释,然后我逐个测试了所有post命令,在最后的第二个命令中,当我检查routuer时,出现了一个输入错误,那就是没有调用该函数。

我解决了这个问题,添加了

module.exports=新的ExampleController();

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

例如

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

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

@Kevin AB接受答案,如果它真的解决了你的问题。这样它将对其他人有所帮助。@KevinAB Hi你能解释一下为什么这不起作用:
app.post吗('/user/all',Controller.Create);
我看不出这有什么问题:
Controller.Create=function(req,res){…}
你能用你的解决方案解释一下吗???@Subburaj错误已经修复,但其他功能不起作用。在导出和导入时出现了一些错误,现在使用
控制器就可以了。创建
。谢谢你是对的,这与真正的问题无关。对我来说,我导出的函数是错误的。对我来说,这是错误的复制粘贴时,我忘记重命名路由器中的新函数。这正是此特定错误类型的问题。可能在控制器文件中缺少导出。“是小东西造成了死亡。”-布什,“小东西”这里要添加的一件事:复制粘贴时检查函数名称!
router.get('/', controller.getUsers);