Node.js和express:路由

时间:2018-07-06 23:07:47

标签: node.js express routes

使用Express路由器时遇到一些麻烦。 我想用几个文件设置我的路线。 我得到的路由文件夹包含2个文件:routes.js和inscription.js

我要执行以下操作

var inscription = require('./routes/inscription.js');
var routes = require('./routes/routes.js');

然后

app.use('/', routes);
app.use('/inscription', inscription);

但是只有来自route.js的路由有效...

这是routes.js的内容

var router = require('express').Router();
var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({ extended: false});

//Homepage
router.get('/', function(req, res){
    res.setHeader('Content-Type', 'text/html');
    res.status(200);
    res.render('home.ejs');
});

//Connexion
router.post('/connexion', urlencodedParser, function(req, res){
    //Some content
});
module.exports = router;

这是inscription.js的内容

var router = require('express').Router();
var hash = require('password-hash');
var db = require('../models/users.js');
var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({ extended: false});

router.get('/inscription', function(req, res){
    res.setHeader('Content-Type', 'text/html');
    res.status(200);
    res.render('inscription.ejs');
});
router.post('/adduser', urlencodedParser, function(req, res){
    var passwordHashed = hash.generate(req.body.inputPassword);
    var newUser = {
        nom      : req.body.inputName,
        email     : req.body.inputEmail,
        password : passwordHashed
    };
    db.addUser(newUser);
    res.redirect('/');
});
router.post('/checkname', urlencodedParser, function(req, res){
    var user = {
        nom      : req.body.inputName
    };
    db.checkName(user, function(length){
        res.send(length);
    });
});
router.post('/checkemail', urlencodedParser, function(req, res){
    var user = {
        email      : req.body.inputEmail
    };
    db.checkEmail(user, function(length){
        res.send(length);
    });
});
module.exports = router;

将inscription.js的内容粘贴到routes.js文件中后,即可使用... 所以我想这就是我导入无法正常工作的文件的方式。

有什么主意吗?

1 个答案:

答案 0 :(得分:2)

题词路由器中的此路由router.get('/inscription', ...)配置为可能不是您想要的路由/inscription/inscription。这是因为您在两个地方指定了它:

app.use('/inscription', inscription);
router.get('/inscription', ...)

因此,整个路由器都位于/inscription的{​​{1}}上。这意味着路由器本身定义的任何路由都将添加到该路径。

从您的问题中并不清楚您打算将URL设置为什么。但是,如果您只希望以上app.use('/inscription', inscription)用于router.get() URL,则请更改:

/inscription

收件人:

router.get('/inscription', ...)

使用router.get('/', ...) 时,该路由器中的每条路由都将以app.use('/inscription', inscription);为前缀。因此,这条路线:

/inscription

将安装在:

router.post('/adduser', ...)

或者,如果您也希望所有铭文路线也都位于顶层,则更改:

/inscription/adduser

对此:

app.use('/inscription', inscription);

因此,除了路由器自身定义的内容外,没有其他任何内容添加到路径中。