[英]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', ...)
所以,整個路由器上/inscription
從app.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.