我有一个使用expressJS框架的nodeJS应用,而MongoDB作为数据存储。
有一种形式,用户可以在文本区域和文本类型输入字段中提供有关项目提交的数据。
有报告称,当他们将另一个标签或应用程序(Google文档,Notepad ++)中的值复制并粘贴到这些字段并提交时,特殊字符将以其URL编码格式存储。
即:A, B, C
变成A%2C B%2C, C
最奇怪的是,在使用Chrome,Firefox或Safari运行NodeJS应用的本地实例时,我无法在MacOS或Windows系统上重现该问题,但我一直看到这个问题突然出现在生产实例上。
前端:
<form method="POST" action="/projects/submit" data-abide="data-abide" novalidate="novalidate" data-e="as8gke-e">
<input type="text" name="team_name" required="required">
...
</form>
路由器:
router.post('/submit', function(req, res) {
var pageData = {};
ProjectRepository.save(req.body)
});
处理mongoDB插入的函数:
ProjectRepository.prototype.save = function(document){
var deferred = q.defer(),
_self = this;
MongoClient.connect()
.then(function(db){
return db.collection(_self.collection);
})
.then(function(collection){
if(document._id){
//Update existing record
document.modified = moment().utc().toDate();
collection.updateOne(
{_id:document._id},
{ $set: document},
function(err, result){
if(err) return deferred.reject(err);
deferred.resolve(result);
}
)
}else{
//Create new document
document.created = moment().utc().toDate();
collection.insertOne(
document,
function(err,result){
if(err) return deferred.reject(err);
deferred.resolve(result);
}
)
}
});
return deferred.promise;
};
谁能建议我该如何调试呢?我怀疑这与服务器/客户端/应用程序字符编码有关,但是很奇怪,我没有看到以URL编码形式的全文,只有非空白非字母数字字符...
以前有人遇到过吗?