我正在尝试通过Joi验证输入表单,然后执行插入操作。 我以为我要先获取数据,然后在插入数据库之前进行验证。
在插入之前,我决定将console.log结果记录下来,但出现此错误。
也有人可以建议一个安全软件包。我听说过头盔,但我不知道如何将其应用于我的代码。有人可以告诉我
[对象:空原型] {书名:“ dswdgefg”,摘要: 'dstsdtgdrtfy \ r \ n',isbn:'234325435',选择: '水果'} [对象:空原型] {书名:“ dswdgefg”,
摘要:'dstsdtgdrtfy \ r \ n',isbn:'234325435',
select:'Fruits'} POST / addbooks 200 23.899 ms-16错误 [ERR_HTTP_HEADERS_SENT]:将标头发送到 客户 在ServerResponse.setHeader(_http_outgoing.js:482:11) 在ServerResponse.header(C:\ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \ response.js:767:10) 在ServerResponse.send(C:\ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \ response.js:170:12) 完成时(C:\ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \ response.js:1004:10) 在tryHandleCache(C:\ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ ejs \ lib \ ejs.js:257:5) 在View.exports.renderFile中[作为引擎](C:\ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ ejs \ lib \ ejs.js:480:10) 在View.render(C:\ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \ view.js:135:8) 在tryRender(C:\ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \ application.js:640:10) 在Function.render(C:\ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \ application.js:592:3) 在ServerResponse.render(C:\ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \ response.js:1008:7) 在C:\ Users \ dokunbam \ Documents \ Node \ crudlist \ app.js:41:7 在Layer.handle_error(C:\ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \ router \ layer.js:71:5) 在trim_prefix(C:\ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \ router \ index.js:315:13) 在C:\ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \ router \ index.js:284:7 在Function.process_params(C:\ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \ router \ index.js:335:12) 在下一个(C:\ Users \ dokunbam \ Documents \ Node \ crudlist \ node_modules \ express \ lib \ router \ index.js:275:10)
这是我的代码
exports.addbooks = function (req, res)
{
const bookname = req.body.bookname;
const summaries = req.body.summaries;
const isbn = req.body.isbn;
const category = req.body.select;
const schema = Joi.object().keys({
bookname: Joi.string().trim().min(6).max(25).required(),
summaries: Joi.string().trim().required(),
isbn: Joi.number().required(),
category: Joi.string().trim().required()
});
Joi.validate(req.body, schema, (err, result) => {
if(err){
console.log(result)
res.send('an error occured');
}
console.log(result)
//Perform knex insert into db
res.send("successfully added");
})
}
谢谢
答案 0 :(得分:0)
发生错误时,您首先要发送an error occured
,然后再次发送successfully added
。您不能这样做,只能向客户端发送一次响应。
发送错误消息后,您需要停止执行代码。
Joi.validate(req.body, schema, (err, result) => {
if(err){
console.log(result)
return res.send('an error occured');
}
console.log(result)
//Perform knex insert into db
res.send("successfully added");
})