簡體   English   中英

Express JS module.export讓我感到困惑

[英]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])

接下來,在第二個問題中,您要詢問兩個不同的電話

  1. router.get('/',c_index);
  2. res.render('index',m_index());

您的第一個調用是使用此語法的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM