javascript - Express js - 在单独的文件中使用路由

标签 javascript node.js express

我正在尝试设置一个 Node 项目,我想将文件 routes.js 放入 routes/routes.js 并将 Controller 文件放入 controllers/ 目录。

所以,例如我有这样的 UserController:

var index = () =>
{
  console.log("User Index");
};
var getUser = (id) => {
  console.log("User by id " + id);
};

module.exports =
{
  index,
  getUser
}

routes.js 中我有这个:

    var express = require('express');
var routes = express.Router();
var users = require('../controllers/usersController');


routes.route('/')
  .get(users.index);

routes.route('/user/:userId')
  .get(users.getUser);


module.exports=
{
  routes
};

index.js 中,我是这样设置的:

    let express = require('express');
let app = express();
let routes = require('./routes/routes');

app.set("views", './views');
app.set("view engine", 'jade');


app.use(express.static(__dirname + '/public'));

app.use('/', routes.index);
// launch ======================================================================
app.listen(9001);

当我尝试运行服务器时出现此错误:

.../node_modules/express/lib/router/index.js:458
  throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn))
  ^
  TypeError: Router.use() requires a middleware function but got a undefined

有什么问题,我如何以这种方式配置设置?

谢谢

最佳答案

你的 userController 将是这样的。

 module.exports = {
        index: (req, res) => {
            console.log("User Index");
        },
        getUser: (req, res) => {
            console.log("User by id " + req.params.id);
        }
    }

你的路由文件将是这样的

var express = require('express');
var routes = express.Router();
var users = require('../controllers/usersController');

routes.get('/', user.index);
routes.get('/user/:userId', user.getUser);

module.exports = routes;

你的索引文件会是这样的

let express = require('express');
let app = express();
let routes = require('./routes/routes');

app.set("views", './views');
app.set("view engine", 'jade');


app.use(express.static(__dirname + '/public'));
app.use('/', routes);

app.listen(9001);

关于javascript - Express js - 在单独的文件中使用路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47034751/

相关文章:

javascript - 使用 JQuery 按钮更改 URL #ID

javascript - 在 Qualtrics 中的嵌入数据名称中使用变量

Javascript替换每个字符串的第一个字母?

javascript - 从客户语音中提取字母数字字符串

node.js - 根据用户操作使用默认值初始化 Formik

node.js - Express 不处理这样的 url "api/:htip/feedback"

javascript - 未捕获的语法错误 : Unexpected token ,

angularjs - 在 Node 中使用 require ('angular' ) 会给出 Window is not Defined

mysql - TypeError : Router. use() 需要一个中间件函数但得到一个对象(NodeJs、Express 和 Mysql)

node.js - 使用sails.js 实现passport-http-bearer token