使用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
相关产品推荐
相关产品推荐

