Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Express JS module.export让我很困惑_Javascript_Node.js_Express - Fatal编程技术网

Javascript Express JS module.export让我很困惑

Javascript 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);

我正在学习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);

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

它遵循下面的语法,更多信息可以在这里找到


接下来,在你的第二个问题中,你问的是两个不同的电话

  • router.get('/',c_索引)
  • res.render('index',m_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;