簡體   English   中英

Node.js和express:路由

[英]Node.js and 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文件中后,它將起作用。因此,我想這就是我導入無效文件的方式。

任何想法?

題字路由器中的該路由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);

因此,除了路由器本身定義的內容外,沒有其他內容添加到路徑中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM