[英]TypeError: res.render is not a function
我遇到了 nodejs 的 res.render 的问题,它告诉我它不是 function。 我查看了有关堆栈溢出的其他帖子,但它们并没有解决我的问题。
问题来了……
我的应用程序有一个 controller,名为 auth.js
在其中,它导出这个名为 updateDiscount 的 function
exports.updateDiscount = (req,res,next) =>{
const { discounts, email, filename, decide } = req.body;
switch(decide){
case "Approve":
approve(discounts,email,filename,decide, req, res);
break;
case "Deny":
deny(discounts,email,filename,decide, req, res);
break;
case "Defer":
defer(discounts,email,filename,decide, req, res);
break;
default:
return res.render('adminGrantPortal', {
message: 'You selected an option from the -- Approve/Deny/Defer -- menu which does not exist. Please contact your system administrator'
});
}
}
接下来我有一个称为批准的工作方法。 因此,当 controller 收到批准消息(通过 switch 中的变量决定)时,它将批准数据库中的用户折扣。 再次,这种方法正在工作......
approve = (discounts, email, filename, decide, req, res) =>{
// get discount based on name
mysqlConnection.query('SELECT id FROM discounts WHERE name=?', [discounts], async (error, results)=>{
if(error){
return res.render('adminGrantPortal',{
message: 'One or more fields either, do not exist in the database, or were filled out incorrectly during your last action.'
});
}
console.log('ayayay');
console.log(results[0]);
let discountID = results[0].id;
// Set staus in files table
mysqlConnection.query("UPDATE files SET status='approved' WHERE email=? AND filename=?", [email,filename], async (error,results)=>{
if(error){
return res.render('adminGrantPortal',{
message: 'Could not update users status, because it is not found in the database.'
});
}
// Add to discounts_users
mysqlConnection.query('INSERT INTO discounts_users (email,discountID) VALUES (?,?)',[email,discountID], async (error,results)=>{
if(error){
return res.render('adminGrantPortal', {
message: 'Cannot update the database, maybe this user already has this discount.'
});
}
return res.render('adminGrantPortal', {
message: 'Approved discount eligibility successfully.'
});
});
});
});
}
现在,我有一个拒绝方法,这意味着当 req.body.decide = 'deny' 时它会出现在这里。 这种方法给了我错误,特别是 console.log('success'); 之后的行
deny = (discounts, email, filename, req, res) =>{
// Set staus in files table
mysqlConnection.query("UPDATE files SET status='denied' WHERE email=? AND filename=?", [email,filename], async (error,results)=>{
if(error){
console.log('error');
return res.render('adminGrantPortal',{
message: 'Could not update users status, because it is not found in the database.'
});
}
});
console.log('success');
return res.render('adminGrantPortal', {
message: 'Denied discount eligibility successfully.'
});
}
为什么这样做?
我已经缩小了一些它不是的东西。
deny = (discounts, email, filename, req, res) =>{
console.log('success');
return res.render('adminGrantPortal', {
message: 'Denied discount eligibility successfully.'
});
}
但是我仍然遇到同样的错误....
TypeError: res.render is not a function
at deny (C:\Users\Andrew\Desktop\Project\racf\client\controllers\auth.js:187:16)
at exports.updateDiscount (C:\Users\Andrew\Desktop\Project\racf\client\controllers\auth.js:127:13)
at Layer.handle [as handle_request] (C:\Users\Andrew\Desktop\Project\racf\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\Andrew\Desktop\Project\racf\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (C:\Users\Andrew\Desktop\Project\racf\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\Andrew\Desktop\Project\racf\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\Andrew\Desktop\Project\racf\node_modules\express\lib\router\index.js:281:22
at Function.process_params (C:\Users\Andrew\Desktop\Project\racf\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\Andrew\Desktop\Project\racf\node_modules\express\lib\router\index.js:275:10)
at Function.handle (C:\Users\Andrew\Desktop\Project\racf\node_modules\express\lib\router\index.js:174:3)
谁能帮我弄清楚我做错了什么?
当调用deny
function 时,您将req
作为第 5 个参数传递,但您试图将其用作 function 中的res
。 在filename
之后添加decide
到deny
函数的参数列表。
deny = (discounts, email, filename, decide, req, res) => {
// ...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.