我正在使用socket.io
在nodejs中创建我的路由模块var express = require("express"); // call express
var taskSchema = require("../models/taskModel");
var mongoose = require("mongoose");
var router = express.Router(); // get an instance of the express Router
module.exports = function (io) {
router.use(function (req, res, next) {
io.sockets.emit('payload');
console.log("Something is happening.");
next();
});
router
.route("/tasks")
.post(function (req, res, next) {
...
});
router
.route("/tasks")
.get(function (req, res) {
...
});
};
当我编译服务器时,我收到此错误
TypeError: Router.use() requires a middleware function but got a undefined
答案 0 :(得分:1)
在我看来,问题可能出在加载此模块的代码中,因为您从未导出实际的路由器。所以,假设您在加载此模块的调用者中执行了app.use()
或router.use()
,那么您不会从函数中返回路由器,因此无法将该路由器挂钩而您会收到错误见。
我猜你可以通过从导出的函数返回路由器来解决这个问题:
var express = require("express"); // call express
var taskSchema = require("../models/taskModel");
var mongoose = require("mongoose");
var router = express.Router(); // get an instance of the express Router
module.exports = function (io) {
router.use(function (req, res, next) {
io.sockets.emit('payload');
console.log("Something is happening.");
next();
});
router
.route("/tasks")
.post(function (req, res, next) {
...
});
router
.route("/tasks")
.get(function (req, res) {
...
});
return router; // <=========== Add this
};
然后,当你这样做时:
let m = require('yourModule');
router.use(m(io));
然后,函数将返回router.use()
将满意的路由器。您可以将中间件或路由器传递给.use()
。
如果这个猜测没有完全达到目标,那么请向我们展示加载并调用此模块的代码。
答案 1 :(得分:0)
当调用该函数时,它将返回相当于undefined的函数。此外,通常在端点之前定义路由。它的结构通常如下:
let myRouter = new Router();
Router.use('something', middlewareFunction, someotherprocess);