使用Express路由器时遇到一些麻烦。
我想用几个文件设置路线。
我得到包含2个文件的routes文件夹: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文件中后,即可使用...
所以我想这就是我导入无法正常工作的文件的方式。

任何想法?

最佳答案

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

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


因此,整个路由器位于/inscriptionapp.use('/inscription', inscription)上。这意味着路由器本身定义的任何路由都将添加到该路径。

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

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


至:

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


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

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


将安装在:

/inscription/adduser




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

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


对此:

app.use('/', inscription);


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

09-28 00:35