使用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', ...)
因此,整个路由器位于
/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);
因此,除了路由器本身定义的内容外,没有其他内容添加到路径中。