在后端使用 DOMPurify 清理表单数据时出错?

Mistake in using DOMPurify on the backend to sanitize form data?

我想知道是否可以在将表单保存到数据库之前使用 DOMPurify 来清理表单上的用户输入。这是我的 routes.js 文件夹中的表单 post:

.post('/questionForm', (req, res, next) =>{
        console.log(req.body);
        /*console.log(req.headers);*/
        const questions = new QuestionForm({
            _id: mongoose.Types.ObjectId(),
            price: req.body.price,
            seats: req.body.seats,
            body_style: req.body.body_style,
            personality: req.body.personality,
            activity: req.body.activity,
            driving: req.body.driving,
            priority: req.body.priority
        });
        var qClean = DOMPurify.sanitize(questions);
        //res.redirect(200, path)({
        //    res: "Message recieved. Check for a response later."
        //});
        qClean.save()
        .then(result => {
            //res.redirect(200, '/path')({
            //    //res: "Message recieved. Check for a response later."
            //});
            res.status(200).json({
                docs:[questions]
            });
        })
        .catch(err => {
            console.log(err);
        });
    });

我还在页面顶部导入了包

import DOMPurify from 'dompurify'; 

当我 运行 服务器提交 post 请求时,它抛出 500 错误并声称 dompurify.sanitize 不是函数。我是不是在错误的地方使用它,and/or 在后端使用它是否正确?

这可能有点晚了,但对于像我这样碰巧 运行 进入这个用例的其他人,我发现了一个 npm 包,目前看来非常适合。它被称为同构-dompurify。

isomorphic-dompurify

DOMPurify 需要 DOM 才能与之交互;通常由浏览器提供。 Isomorphic-dompurify feeds DOMPurify 另一个包,“jsdom”,作为一个依赖,就像一个补充虚拟 DOM 所以 DOMPurify 知道如何清理你的输入服务器端。

用包自己的话说“DOMPurify 需要一个 DOM 树作为基础,默认情况下它在 Node 中不可用。要在服务器端工作,我们需要一个假的DOM 将被创建并提供给 DOMPurify。这​​意味着 DOMPurify 服务器上的初始化逻辑与客户端上的不同。