[英]Express JS module.export is confusing me
我正在學習express JS(EJS模板引擎),並使用express-generator來創建我的項目。 我僅對啟動代碼進行了一些更改。
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->則須─> 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-> 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_index
它遵循以下語法,可以在此處找到更多信息res.render()
res.render(view [, locals] [, callback])
接下來,在第二個問題中,您要詢問兩個不同的電話
您的第一個調用是使用此語法的get路徑'/'
和回調c_index
對象。 在這里查看示例,在這里可以找到更多答案router.METHOD 。
router.METHOD(path, [callback, ...] callback)
您在這里的第二個呼叫遵循的是與上述相同的范例
res.render('index', m_index());
在嘗試了解您使用m_index和c_index調用時,請嘗試使用typeof運算符。 希望這可以幫助。
使用SMVC對其進行更改,希望它將幫助您在Node.js中開始構建。
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中, 可以將ES6與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與模板引擎一起使用。 查看更多
使用HBS:{{hi}}
使用ejs:<%= hi%>
你有任何問題嗎? 請發表評論,我可以為您提供很多幫助...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.