ejs.renderFile 在 js 文件中出错

ejs.renderFile in js file got a error

我是 Node.js 的新手。我在 js 文件中 运行 的以下代码出现错误:“'发生错误:renderFile(siginin.ejs)”。想不通为什么?

ejs.renderFile('./views/signin.ejs',function(err, result) {
   if (!err) {
            res.end(result);
   }
   else {
            res.end('An error occurred: renderFile(siginin.ejs)');
            console.log(err);
   }

});

错误:

cb 不是函数

TypeError: cb is not a function
at Object.exports.renderFile (C:\Users\MyPC\workspace\Nodejs_Login\node_modules\ejs\lib\ejs.js:353:12)
at signin (C:\Users\MyPC\workspace\Nodejs_Login\routes\home.js:10:6)
at Layer.handle [as handle_request] (C:\Users\MyPC\workspace\Nodejs_Login\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\MyPC\workspace\Nodejs_Login\node_modules\express\lib\router\route.js:131:13)
at Route.dispatch (C:\Users\MyPC\workspace\Nodejs_Login\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (C:\Users\MyPC\workspace\Nodejs_Login\node_modules\express\lib\router\layer.js:95:5)
at C:\Users\MyPC\workspace\Nodejs_Login\node_modules\express\lib\router\index.js:277:22
at Function.process_params (C:\Users\MyPC\workspace\Nodejs_Login\node_modules\express\lib\router\index.js:330:12)
at next (C:\Users\MyPC\workspace\Nodejs_Login\node_modules\express\lib\router\index.js:271:10)
at C:\Users\MyPC\workspace\Nodejs_Login\node_modules\express\lib\router\index.js:618:15

我在浏览器中访问此 link 并出现上述错误: http://localhost:3000/signin

app.js:

var home = require('./routes/home'); //add label
app.get('/signin', home.signin);

这是home.js的文件:

home.js

/**
* New node file
*/
var ejs = require("ejs");
var mysql = require('./mysql');

function signin(req,res) {

ejs.renderFile('./views/signin.ejs',function(err, result) {
   // render on success
   if (!err) {
            res.end(result);
   }
   // render or error
   else {
            res.end('An error occurred: renderFile(siginin.ejs)');
            console.log(err);
   }
   });

  }


function afterSignIn(req,res)
{
// check user already exists
var getUser="select * from users where username='"+req.param("inputUsername")+"' and password='" + req.param("inputPassword") +"'";
console.log("Query is:"+getUser);

mysql.fetchData(function(err,results){
    if(err){
        throw err;
    }
    else 
    {
        if(results.length > 0){
            console.log("valid Login");
            ejs.renderFile('./views/successLogin.ejs', { data: results } , function(err, result) {
                // render on success
                if (!err) {
                    res.end(result);
                }
                // render or error
                else {
                    res.end('An error occurred: renderFile(successLogin.ejs)');
                    console.log(err);
                }
            });
        }
        else {    

            console.log("Invalid Login");
            ejs.renderFile('./views/failLogin.ejs',function(err, result) {
                // render on success
                if (!err) {
                    res.end(result);
                }
                // render or error
                else {
                    res.end('An error occurred: renderFile(failLogin.ejs).');
                    console.log(err);
                }
            });
        }
    }  
},getUser);
}

您可以在 Express 中将 EJS 设置为视图引擎并使用 res.render() instead of all of this extra code which does the same thing. Your current approach is a lot messier and doesn't leverage some of the better parts of Express, such as View Engine middleware

使用 Express 很简单

// Tell Express to render the views from ./views
app.set('views', path.join(__dirname, 'views'));

// Set EJS as the View Engine
app.set('view engine', 'ejs');

上面的代码块会将 EJS 设置为 Express 的视图引擎,并将其用于 res.render() 函数。

然后只需在您的路线中就可以做到

app.get('/signin', function(req, res) {
  return res.render('signin');
});

或者您可以编辑 home.signin() 函数

signin(req, res) {
  return res.render('signin');
}