首页 文章

Router.use需要中间件功能吗?

提问于
浏览
2

所以我试图在一个名为login_routes.js的独立JS文件中分离我的登录路由

我一直收到这个特定的错误:

TypeError:Router.use()需要中间件函数,但在Function处获得了一个Object . (/Users/ethanthomas/Desktop/mean-stuff/express-server/node_modules/express/lib/router/index.js:446:13)

不完全理解它要求我 implement

login_routes.js:

var express = require('express');
var app = express();

app.route('/login')

.get(function(req, res, next) {
    res.send('this is the login form');
})

.post(function(req, res, next) {
    console.log('processing');
    res.send('proccessing the login form!');
});

server.js:

var express = require('express');
var app = express();
var path = require('path');
var adminRoutes = require('./app/routes/admin_routes');
var loginRoutes = require('./app/routes/login_routes');

app.use('/admin', adminRoutes);
app.use('/login', loginRoutes);


//send our index.html file to the user for the home page
app.get('/', function(req, res) {
    res.sendFile(path.join(__dirname + '/index.html'));
});

//start the server
app.listen(1337);
console.log('leet is the magic port');

4 回答

  • 0

    您的 login_routes.js 应该看起来像这样(在快递的上下文中):

    var express = require('express');
    var router = express.Router();
    
    // GET request to /login
    router.get('/', function(req, res, next) {
        // do something
    });
    
    // POST request to /login
    router.post('/', function(req, res, next) {
        // do something
    });
    
    module.exports = router;
    

    在你的 app.js 中使用

    var login_routes = require('./login_routes');
    ...
    app.use('/login', login_routes);
    ...
    

    看看express-generator模块生成的代码 . 这是快递网络服务器应用程序的起点 .

  • 5

    人们已经在评论中提供了解决方案的提示 .

    第一个问题是您需要从 login_routes.js 导出"sub"应用 . 为此,请更改此:

    var app = express();
    

    进入:

    var app = module.exports = express();
    

    其次,你可能是无意中为 GET /login/loginPOST /login/login 创建路线 . 要解决此问题,请在 login_routes.js 中使用:

    app.route('/').get(...).post(...);
    

    这是因为子应用程序中的根路径( login_routes.js 中的根路径)将映射到主应用程序( server.js )中 app.use() 中使用的路径 .

  • 0

    这样做:

    login_routes.js:

    exports.get = function( req, res ) {
      res.send('this is the login form');
    };
    
    exports.post = function( req, res ) {
      console.log('processing');
      res.send('proccessing the login form!');
    };
    

    server.js:

    var loginRoutes = require('./app/routes/login_routes');
    
    app.get('/login', loginRoutes.get);
    app.put('/login', loginRoutes.post);
    
  • 3

    login_routes.js:

    var express = require('express');
    var app = express();
    
    app.route('/login')
    
    .get(function(req, res, next) {
        res.send('this is the login form');
    })
    
    .post(function(req, res, next) {
        console.log('processing');
        res.send('proccessing the login form!');
    });
    
    module.exports = router;
    

    只是写 module.exports = router 然后它会工作

相关问题