【问题标题】:Express - Trying to imitate controllers. Got Router.use() requires callback functions but got a [object String] errorExpress - 试图模仿控制器。得到 Router.use() 需要回调函数但得到 [object String] 错误
【发布时间】:2014-08-30 18:44:44
【问题描述】:

我正在尝试在 Node.js 和 Express 框架中创建控制器。 我创建了app.jsroutes/index.jscontroller/index.js

这是每个文件的代码:

var express = require("express"),
    path = require("path"),
    indexRoutes = require("./routes/index");

var app = express();

app.use("view engine", "ejs");
app.use("views", path.join(__dirname, "views"));

app.use("/", indexRoutes);

var port = process.env.PORT || 3000;
app.listen(port, function() {
    console.log("listening to port " + port);
});

还有routes/index.js

var express = require("express");
var controller = require("../controller/index");

var router = express.Router();

router.get("/", controller.index);
router.get("/list", controller.list);

module.exports = router;

还有controller/index.js:

var indexController = {
    index: function(req, res) {
        res.send("index action");
    }, 
    list: function(req, res) {
        res.send("list action");
    }
}

module.exports = indexController;

当我运行服务器时。我在终端中收到此错误:

Error: Router.use() requires callback functions but got a [object String]
    at Function.proto.use (/media/misc/www/expself/node_modules/express/lib/router/index.js:327:11)
    at Function.app.use (/media/misc/www/expself/node_modules/express/lib/application.js:195:16)
    at Object.<anonymous> (/media/misc/www/expself/app.js:7:5)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:906:3

有什么帮助吗?我是 node.js 的初学者

【问题讨论】:

  • 能否在router.get 上方添加console.log(typeof controller.index); 并粘贴结果?

标签: javascript node.js model-view-controller express


【解决方案1】:

这些:

app.use("view engine", "ejs");
app.use("views", path.join(__dirname, "views"));

应该是:

app.set("view engine", "ejs");
app.set("views", path.join(__dirname, "views"));

app.use() 仅用于中间件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多