Express搭建Node.js Webserver时所有页面均跳转至同一登录页求助
问题原因分析
- 路由匹配顺序错误:Express的路由是按代码书写顺序从上到下匹配的,你先定义了匹配所有GET请求的
app.route('/*').get(),所有请求走到第一个通配符路由就直接返回登录页,后面定义的第二个通配符路由永远不会被触发 - 静态资源配置路径错误:
express.static(__dirname + 'public/css')拼接路径时缺少斜杠,会生成你的项目目录public/css这类错误路径,导致静态资源加载失败 - 没有为特定页面定义明确路由,全靠通配符匹配不符合多页面路由的开发逻辑
修复后的完整代码
const express = require('express') const app = express() const port = 3000 var path = require("path"); // 暂时未用到的依赖可以先注释,避免运行报错 // var request = require('request'); // const { get } = require('./routes/brand'); // 静态文件配置,用path.join拼接路径更稳妥,适配不同系统的路径分隔符规则 app.use(express.static('public')) app.use('/css', express.static(path.join(__dirname, 'public/css'))) app.use('/img', express.static(path.join(__dirname, 'public/img'))) app.use('/js', express.static(path.join(__dirname, 'public/js'))) // 根路径路由,返回品牌页 app.get('/',(req, res) => { res.sendFile(path.join(__dirname, '/views/brand.html')); }) // 明确匹配登录页请求 app.get('/login.html', function(req, res) { res.sendFile(path.join(__dirname, '/views/login.html')); }); // 明确匹配门店页请求 app.get('/localstores.html', function(req, res) { res.sendFile(path.join(__dirname, '/views/localstores.html')); }); // 通配符路由放在最后,用来处理未定义路径的请求,可根据需求替换为404页面 app.get('/*', function(req, res) { res.status(404).send('请求的页面不存在') }) // 启动服务 app.listen(port,() => console.info(`Listening on port ${port}`))
补充说明
你现有HTML中的<a>跳转代码逻辑完全正常,修改完Express代码后重启服务,点击对应按钮即可正常跳转对应页面。
内容的提问来源于stack exchange,提问作者Unitynoob
相关产品推荐
相关产品推荐

