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);