You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express+Handlebars渲染input placeholder仅显示首词解决方案

问题根因

模板中绑定HTML属性时未给变量值加引号,导致浏览器解析异常。
你写的placeholder={{conteudo_ocorrencia}}渲染后生成的HTML为placeholder=aucto nunc nulla vulputate,按照浏览器解析HTML的规则,属性值如果包含空格必须用引号包裹,否则空格后的内容会被识别为独立的自定义属性,最终placeholder只会读取到第一个空格前的内容,也就是第一个单词aucto。
同样的问题也存在于工单标题输入框的placeholder={{titulo_ticket}}位置,只要titulo_ticket包含空格就会出现相同的截断问题。

修复方案

给所有绑定到HTML属性的变量外层加上双引号即可,需要修改两处模板代码:

  1. 工单标题输入框部分
    原代码:
<input  type="text" class="form-control bg-light mb-2" id="titulo_ticket" placeholder={{titulo_ticket}} disabled>

修改为:

<input  type="text" class="form-control bg-light mb-2" id="titulo_ticket" placeholder="{{titulo_ticket}}" disabled>
  1. 跟进记录输入框部分
    原代码:
<input type="text"  class="form-control bg-light" id="titulo_ticket" placeholder={{conteudo_ocorrencia}} disabled>

修改为:

<input type="text"  class="form-control bg-light" id="titulo_ticket" placeholder="{{conteudo_ocorrencia}}" disabled>
额外代码优化建议

你当前后端路由的异步逻辑存在隐患:工单查询和跟进记录查询是并行执行的,你直接在跟进记录查询的回调中读取ticketControl变量,存在工单查询尚未完成、变量值为undefined的可能,会导致页面工单数据渲染失败。建议改用Promise.all等待两个查询全部执行完成后再调用渲染方法,优化后的路由代码如下:

const express = require('express');
const router = express.Router();
const Ticket = require('../models/Ticket');
const db = require("../models/deskmodedb");
const Ocorrencia = require('../models/Ocorrencia');

router.get('/detalhes-ticket/:cod_ticket', async function(req, res) {
    console.log('Request Id:', req.params.cod_ticket);
    try {
        // 同步模型
        await Ticket.sync();
        await Ocorrencia.sync();
        // 并行查询两类数据,等待全部返回
        const [tickets, ocorrencias] = await Promise.all([
            db.sequelize.query(
                'SELECT cod_ticket, titulo_ticket, descricao_ticket, status_ticket, tipo_ticket, data_abertura FROM ticket WHERE cod_ticket IN  (:codigo_ticket) ', {
                    replacements: { codigo_ticket: req.params.cod_ticket },
                    type: db.Sequelize.QueryTypes.SELECT
                }
            ),
            db.sequelize.query(
                'SELECT ROW_NUMBER() OVER(ORDER BY cod_ocorrencia ASC) AS Row, cod_ticket_f, conteudo_ocorrencia, cod_ocorrencia,data_ocorrencia FROM ocorrencia WHERE cod_ticket_f IN (:codigo_ticket) ', {
                    replacements: { codigo_ticket: req.params.cod_ticket },
                    type: db.Sequelize.QueryTypes.SELECT
                }
            )
        ])
        // 数据全部就绪后渲染页面
        res.render('detalhesTicket', {
            tickets: tickets,
            ocorrencias: ocorrencias,
            style: 'global.css'
        })
    } catch (err) {
        console.log('error' + err)
        res.sendStatus(500)
    }
})

内容的提问来源于stack exchange,提问作者Thiago

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 14:18:27