Javascript Express JS module.export让我很困惑
我正在学习ExpressJS(EJS模板引擎)并使用ExpressGenerator创建我的项目。 我只对启动代码做了一些更改 MyApp->routes->index.jsJavascript Express JS module.export让我很困惑,javascript,node.js,express,Javascript,Node.js,Express,我正在学习ExpressJS(EJS模板引擎)并使用ExpressGenerator创建我的项目。 我只对启动代码做了一些更改 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);
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->models->m_索引
module.exports = function() {
return { title: 'Express' };
};
MyApp->View->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>
当我编辑MyApp->controllers->c_index.js时
res.render('index', m_index());
它起作用了。这让我困惑,因为
router.get('/', c_index);
没有括号。但是,
res.render('index', m_index());
有括号。我的问题是,为什么一个没有括号,而另一个有括号?
虽然,
router.get('/', c_index(req, res, next));
没有工作。请帮帮我。谢谢。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
希望传递一个函数,所以您不应该自己调用它。当您调用res.render('index',m_index())时
您正在进行响应调用,通过调用视图来呈现视图,该视图是'index'
,然后调用局部对象m\u index
它遵循下面的语法,更多信息可以在这里找到
接下来,在你的第二个问题中,你问的是两个不同的电话
“/”
和回调c_index
对象,使用get应用此语法。看看这里的例子,这里可以回答更多问题
你在这里的第二个调用是遵循上面提到的相同范例
res.render('index', m_index());
在试图理解使用m_索引和c_索引调用的内容时,请尝试使用运算符。希望这有帮助。使用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;
var SomeController = require('../controllers/SomeController');
module.exports = function (express) {
var router = express.Router();
var someController = new SomeController ;
router.get('/', someController.yourAction);
return router;
}
在routes/index.js中
var express = require('express');
var router = express.Router();
var index = require('../routes/index');
/* GET home page. */
router.get('/', index);
module.exports = router;
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中,
在home.hbs(或home.ejs…)中-我建议您使用带模板引擎的.hbs强>
与hbs:{{hi}
使用ejs:
你有什么问题吗?请评论,我可以帮你很多…谢谢你的回复。据我所知,他们都在返回目标,对吗?都是什么?函数
m_index
和c_index
?我不确定c_index
返回什么。(它返回res.render
所做的任何操作…可能什么都没有。)感谢您的回复。我真的很喜欢你这样做。但我有一个问题。我正在使用mysql(因为我有很多使用mysql的经验)。我想问,为什么您的方法不包含模型?我的意思是数据库部分可以在模型文件中分开。创建两个文件夹:模型和序列。它将与我们合作。在控制器(SomeController)中,您需要模型并使用它。这是SMVC。1.模型:您想使用MySQL,所以我们将使用ORM+节点。请参阅更多:。在这里创建模型模式。2.服务:我们在您需要get/set/…时使用它。。。使用DBWith MySQL+Node+ORM:我建议您安装这个包
var SomeController = require('../controllers/SomeController');
module.exports = function (express) {
var router = express.Router();
var someController = new SomeController ;
router.get('/', someController.yourAction);
return router;
}
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;