路由选择的问题
在使用connect中间件时,我只想让:
app.use('/', (req,res,next)=>{........});
app.use('/home', (req,res,next)=>{........});
“/“和”/home"匹配正常,但是我随便试了一下”/hdgsjah",它不知为什么的就匹配到"/“目录底下,为什么”/abc"、"/dgks"…等目录也会被匹配,好像隐约记得路由规则好像也会匹配其子目录.
求解释,如何过滤掉其他未设置的路由。
我只想"/“匹配到”/“目录的路由,”/home"匹配到"/home",改如何解决?
ps(不要使用框架,用coonect解决),求大神支招。
付代码:
server.js
const
connect = require('connect'),
static = require('serve-static'),
bodyParser = require('body-parser'),
http = require('http'),
fs = require('fs'),
route = require('./route/main'),
app = connect(),
port = process.env.VCAP_APP_PORT || 3000;
app.use(static(__dirname + '/public'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: false
}));
app.use('/home', route.home);
app.use('/', route.login);
http.createServer(app).listen(port, () => {
console.log(`server run in the ${port}`);
});
route/main.js
const
fs = require('fs'),
rLogin = {
"GET": (req, res) => {
fs.readFile('./public/login.html', (err, html) => {
if (err) return console.log(err);
res.writeHeader(200, {
"Content-Type": "text/html"
});
res.write(html);
res.end();
});
},
"POST": (req, res) => {
}
},
rHome = {
"GET": (req, res) => {
fs.readFile('./public/main.html', (err, html) => {
if (err) return console.log(err);
res.writeHeader(200, {
"Content-Type": "text/html"
});
res.write(html);
res.end();
});
},
"POST": (req, res) => {
}
};
module.exports = {
login: (req, res,next) => {
console.log('in the login');
const method = req.method,
run = rLogin[method];
if (!run) {
return console.log('method no defind!');
}
run(req, res);
},
home: (req, res, next) => {
console.log('in the home');
const method = req.method,
run = rHome[method];
if (!run) {
return console.log('method no defind!');
}
run(req, res);
}
}
… 为何你要用connect
而不是express
或koa
, 看了一下, connect
似乎没有路由概念, 只有middleware
我估计大概要这样
app.use('/', function(req, res, next) {
// 判断是不是你想要handle的路径
// 对connect不熟, 下面这个判断可能不够强, 仅供参考
if(req.path != '/') {
// 这个中间件放顶部, 交给下个中间件
next();
}else {
route.login(req, res, next);
}
});
@William17 想写点小东西,不想用Express框架,path判断我也想过…感觉不太优雅,刚接触node,不晓得啊。还有帮我看看body-parser 解析的req.query为什么老是undefined,谢了哈。
@kinglisky
如果你不想用别人封装好, 你只能自己封装优雅的接口
body-parser
从名称知道它是parse body的, 你要用 query, 你要自己写个或者找个别人的 query parser, connect
官方里写着这个qs