繁体   English   中英

类型错误:res.render 不是 function

[英]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.'
    });
}

为什么这样做?

我已经缩小了一些它不是的东西。

  1. 我相信从 mysqlconnection 返回的我的“结果”object 与我的res object 的名称并不相同,后者将控制标题。
  2. 我相信这和我的 mysql 没有任何关系,因为我把它拆了看起来像这样......
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之后添加decidedeny函数的参数列表。

deny = (discounts, email, filename, decide, req, res) => {
  // ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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