【问题标题】:Trying to render different view between mobile and web from Express JS尝试从 Express JS 在移动设备和 Web 之间呈现不同的视图
【发布时间】: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


【解决方案1】:

resultPath 变量不存在,可能不需要。

应该是这样的:

.get('/', (req, res) => {
  const isMobile = browser(req.headers['user-agent']).mobile;
  res.render(isMobile ? "pages/mobile" : "pages/index");
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2021-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多