【发布时间】:2019-01-31 09:07:48
【问题描述】:
我正在尝试为每种类型的设备呈现不同的视图。如果为 true,将呈现移动端,mobile.ejs 文件,如果不是移动端,则为 'pages/index.js'。
目前,我的文件 index.js 负责从 Express 进行配置。
快递:
const express = require('express')
const path = require('path')
const req = require('request')
const bodyParser = require('body-parser')
const PORT = process.env.PORT || 5000
const browser = require('browser-detect')
const router = express.Router()
if(browser) {
router.get('/', req => {
const result = browser(req.headers['user-agent']);
resultadoMobile = (result.mobile)
if (resultadoMobile) {
resultPath = "pages/mobile";
return resultPath;
}
else {
resultPath = "pages/index";
return resultPath;
}
})
}
express()
.use(express.static(path.join(__dirname, 'public')))
.set('views', path.join(__dirname, 'views'))
.set('view engine', 'ejs')
.use (bodyParser.urlencoded({ extended: true }))
.get('/', (req, res) => res.render(resultPath))
.listen(PORT, () => console.log(`Servidor iniciado em ${ PORT }`))
所以,总结一下:
我需要使用browser-detect来检测是否是移动的,如果是真的,渲染'pages /mobile.ejs',如果不是'pages /index.ejs'.
来自服务器的回答是:
ReferenceError: **resultPath** is not defined
at express.use.set.set.use.get (\path\**\\index.js:33:38)
at Layer.handle [as handle_request] (\path\**\\node_modules\express\lib\router\layer.js:95:5)
at next (\path\**\\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (\path\**\\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (\path\**\\node_modules\express\lib\router\layer.js:95:5)
at \path\**\\node_modules\express\lib\router\index.js:281:22
at Function.process_params (\path\**\\node_modules\express\lib\router\index.js:335:12)
at next (\path\**\\node_modules\express\lib\router\index.js:275:10)
at urlencodedParser (\path\**\\node_modules\body-parser\lib\types\urlencoded.js:91:7)
at Layer.handle [as handle_request] (\path\**\\node_modules\express\lib\router\layer.js:95:5)
【问题讨论】:
-
什么是 resultPath 以及为什么要定义它?
-
在这种情况下,“result.mobile”返回是否移动为真。然后,resultadoMobile 接收到这个问题的值。因此,如果 resultadoMobile 为真,则当 somone 在 url 中请求“/”时,它会打印“pages/mobile.ejs”。我希望打印“pages/index.ejs”或“pages/mobile.ejs”。视情况而定。
-
代码似乎过于复杂,没有明确表达意图。如果就这么简单,那么它也可以更简单。
标签: javascript node.js express cross-browser