Express.js TypeError问题:点击词典阴性词链接触发toLowerCase未定义错误
解决点击阴性词链接时的TypeError问题
看起来你遇到的核心问题是点击阴性词链接时没有把单词作为查询参数传递给/searching路由,导致req.query.search是undefined,调用.toLowerCase()时就抛出了TypeError。下面是具体的修复步骤:
1. 修正display.ejs中的链接代码
你当前的链接只指向了/searching路由,但没有携带搜索参数。需要把阴性词作为search参数拼接到URL中:
<%= grammatical[j].pos%></i>: (<i>unti:</i> <a href="/searching?search=<%= encodeURIComponent(feminine) %>"><%= feminine %></a>, asget:<%= grammatical[j].pl%>
这里用encodeURIComponent()是为了处理单词中可能包含的特殊字符(比如空格、特殊符号),避免URL解析出错。
2. 优化app.js中的参数处理逻辑
即使修复了链接,也要考虑用户直接访问/searching而不带参数的情况,提前处理val为undefined的场景:
app.get('/searching', function(req, res, next){ var val = req.query.search; var options= req.query.lang; // 先判断搜索词是否存在 if (!val) { return res.render('index', { error: '请输入要搜索的单词' }); } val = val.toLowerCase().trim(); // 你的后续处理逻辑... });
为什么之前的尝试没起作用?
你试过的val= val.toString().toLowerCase().trim()这类方法,本质上是在尝试处理val的类型,但问题根源是val本身就是undefined——因为链接根本没传参数,所以这些方法只会让报错变成Cannot read property 'toString' of undefined,并没有解决核心问题。
另外,main.js中的点击事件alert其实可以移除了,现在通过URL直接传递参数的方式更可靠、更符合HTTP的设计规范。
内容的提问来源于stack exchange,提问作者omar
相关产品推荐
相关产品推荐

