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

使用express-validator@6.12.1遇TypeError: validator.escape不是函数问题求助

问题解决:TypeError: validator.escape is not a function

错误原因

你使用的express-validator@6.12.1版本中,顶层导出的validator对象并没有直接暴露escape方法。Codecademy教程里的写法可能对应更早的版本,或是他们直接导入了底层的validator库而非express-validator。

解决办法

方法1:直接导入底层validator库

express-validator依赖官方的validator包,该包已随安装自动加入项目,直接导入它的escape方法即可:

// 替换原来的const validator = require("express-validator");
const { escape } = require('validator');

// 后续使用时直接调用escape
var comment = escape(request.body.comment);

方法2:使用express-validator的中间件规范写法

express-validator的设计初衷是用中间件处理请求参数,更符合框架使用习惯:

// 先导入sanitizeBody
const { sanitizeBody } = require('express-validator');

// 在路由中添加中间件处理comment字段
app.post("/public_forum", sanitizeBody('comment').escape(), function (request, response) {
  if (request.session.loggedin) {
    // 这里request.body.comment已经被自动转义处理过了
    var comment = request.body.comment;
    var username = request.session.username;
    // ... 后续代码保持不变
  }
});

额外重要提醒

你的代码存在SQL注入风险!当前用字符串拼接生成SQL语句的方式非常危险,必须改用参数化查询:

// 替换原来的INSERT语句
db.run(
  `INSERT INTO public_forum (username,message) VALUES (?, ?)`,
  [username, comment],
  (err) => {
    console.log(err);
  }
);

参数化查询会自动处理变量的转义,彻底避免SQL注入攻击。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:40:59