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

时间:2015-06-12 18:01:37

标签: javascript node.js express mean-stack

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

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

  

TypeError:Router.use()需要中间件函数但是有一个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 :(得分:5)

您的 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模块生成的代码。这是快递网络服务器应用程序的起点。

答案 1 :(得分:3)

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

第一个问题是你需要导出你的" sub"来自login_routes.js的应用。为此,请更改此:

var app = express();

进入这个:

var app = module.exports = express();

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

中使用此功能
app.route('/').get(...).post(...);

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

答案 2 :(得分: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 :(得分:0)

<强> 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然后就可以了