我无法弄清楚为什么我从快速验证器得到这个回复:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Cannot POST /product</pre>
</body>
</html>
我在服务器上收到一个formdata请求,我正在按预期提取文件图像和文本字段。然后我将提取的字段添加到请求对象的主体。然后我调用express-validator函数来验证字段。在此之前一切正常,如果我向服务器发送错误的数据,我的验证器会回复不正确的字段,但如果所有字段都正确,我会得到之前提到的响应,我无法弄清楚原因。
这是我的验证函数:
fieldProduct(req, res, next) {
req.assert('name', 'Should not be empty').notEmpty();
req.assert('name', 'Should have 2 to 40 characters').len(2, 40);
req.assert('price', 'Should not be empty').notEmpty();
req.assert('price', 'Should be numeric and like this: 12,12 or 1.10').matches(/^[\d]+[\.]{1}[\d]{1,2}/g);
req.assert('categoryId', 'Should not be empty').notEmpty();
req.assert('categoryId', 'Should have 10 caracters').len(10, 10);
var errors = req.validationErrors();
errors ? res.status(400).json(errors) : next();
}
这是我用我从formdata中提取的字段构造了请求主体后调用验证器的函数:
product.create = function(req, res, next, callback) {
console.log("DAO create product ");
Crud.upload(req, function(status, data, body) {
if(status == 200) {
req.body.name = body.name[0];
req.body.brand = body.brand[0];
req.body.description = body.description[0];
req.body.categoryId = body.categoryId[0];
req.body.price = Number(body.price[0]);
console.log(req.body);
validate.fieldProduct(req, res, next);
if(!req.validationErrors()) {
var object = req.body;
object.imageFile = data;
Crud.create(object, Product, constructProduct, function(status, data) {
callback(status, data);
});
} else {
res.status(400).json(req.validationErrors())
}
} else {
callback(status, data);
}
});
}
我还注意到,除了得到响应,我的代码一直在运行,在数据库中,数据按预期创建。
答案 0 :(得分:0)
您看到的消息是Express调用next()
时返回的默认错误消息,但链中没有其他路由或中间件处理程序。我不相信验证器存在问题。
您是否在任何应该为此请求发送响应的代码?
我建议添加一个通用的404处理程序来确认这是发生了什么:https://expressjs.com/en/starter/faq.html#how-do-i-handle-404-responses