我正在学习快速JS(EJS模板引擎)并使用快速生成器来创建我的项目。 我在启动代码中只进行了一些更改。
MyApp-> routes-> index.js
var express = require('express');
var router = express.Router();
var c_index = require('../controllers/c_index');
/* GET home page. */
router.get('/', c_index);
module.exports = router;
MyApp-> controllers-> c_index.js
var m_index = require('../models/m_index');
module.exports = function(req, res, next) {
res.render('index', m_index);
};
MyApp->模型 - > M_索引
module.exports = function() {
return { title: 'Express' };
};
MyApp->&则须─GT; index.ejs
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
</body>
</html>
当我运行此代码时,chrome继续加载,当我关闭浏览器时,我得到了
GET / - - ms - -
当我编辑MyApp-&gt; controllers-&gt; c_index.js时,
res.render('index', m_index());
有效。
这让我感到困惑,因为,
router.get('/', c_index);
没有括号。但是,
res.render('index', m_index());
有括号。
我的问题是为什么一个人没有括号但其他人没有括号?
尽管
router.get('/', c_index(req, res, next));
无效。
请帮我。谢谢。
答案 0 :(得分:0)
m_index
是一个如下所示的模块:
module.exports = function() {
return { title: 'Express' };
};
因此,当您执行const m_index = require('m_index')
之类的操作时,m_index
就是一个函数。
要调用函数,请使用括号。 m_index()
调用名为m_index
的函数并返回结果。
c_index.js
也会导出一个函数。
res.render(..., m_index())
看起来像是因为res.render
想要传递一个对象,而不是一个函数。所以你调用函数,得到一个对象作为结果,并将其传递给res.render
。
router.get(..., c_index)
看起来像是因为router.get
想要传递一个函数,所以你不应该自己调用它。
答案 1 :(得分:0)
当您致电res.render('index', m_index());
时,您正在通过调用'index'
视图进行回复来呈现视图,然后调用本地对象m_index
它遵循以下语法,可在此处找到更多信息res.render()
res.render(view [, locals] [, callback])
接下来,在您的第二个问题中,您询问两个不同的电话
您的第一个电话是路径'/'
和回调c_index
对象,使用get应用此语法。查看此处的示例,可在此处更多地回答router.METHOD。
router.METHOD(path, [callback, ...] callback)
此处您的第二次电话会议遵循与上述相同的范例
res.render('index', m_index());
尝试使用m_index和c_index尝试了解您的呼叫时尝试使用typeof运算符。希望这会有所帮助。
答案 2 :(得分:0)
使用SMVC进行更改,希望它能帮助您在nodejs中启动结构。
<强> app.js 强>
var express = require('express');
var router = express.Router();
var index = require('../routes/index');
/* GET home page. */
router.get('/', index);
module.exports = router;
在routes / index.js
中var SomeController = require('../controllers/SomeController');
module.exports = function (express) {
var router = express.Router();
var someController = new SomeController ;
router.get('/', someController.yourAction);
return router;
}
在controllers / SomeController.js中,You could use ES6 with Class
class SomeController {
yourAction(req, res, next) {
// Do something. Use Model & Service if you want to work with DB
res.render('/home', {hi: "Hello guy ^^"});
}
}
module.exports = SomeController;
在home.hbs(或home.ejs ...)中 - 我建议你使用.hbs和模板引擎。 See more 强>
使用hbs:{{hi}}
使用ejs:&lt;%= hi%&gt;
你有什么问题吗?请评论,我可以帮到你......