Mysql 此delete process node.js缺少什么?
编辑可以很好地工作,但它似乎与删除完全不同,因为编辑实际上会转到不同的页面。这是一个项目的一部分,我们只是将提供给我们的代码拼凑在一起,在这里和那里添加几行,但我不知道删除中缺少了什么 请求获取项目id,查询在我看来像是一个正确的删除函数,其余的只是打印结果?“删除”按钮可以工作,但我只能看到这些 删除--Mysql 此delete process node.js缺少什么?,mysql,node.js,Mysql,Node.js,编辑可以很好地工作,但它似乎与删除完全不同,因为编辑实际上会转到不同的页面。这是一个项目的一部分,我们只是将提供给我们的代码拼凑在一起,在这里和那里添加几行,但我不知道删除中缺少了什么 请求获取项目id,查询在我看来像是一个正确的删除函数,其余的只是打印结果?“删除”按钮可以工作,但我只能看到这些 删除-- app.delete('/delete/(:id)'),函数(req,res,next){ 请求getConnection(功能(错误,连接){ conn.query('DELETE f
app.delete('/delete/(:id)'),函数(req,res,next){
请求getConnection(功能(错误,连接){
conn.query('DELETE from store where id='+req.params.id,function(err,result){
如果(行数。长度)
发送POST
请求,而不是DELETE
HTTP请求
HTML表单只能执行action=“POST”
或action=“GET”
。您需要:
- 在这种情况下,使用
POST
进行删除
- 使用javascript执行
DELETE
请求。(ajax ish请求)
我猜您的删除
表单在输入值之前就关闭了
更改html,如下所示:
<form method="post" action="/store/delete/<%= item.id %>"
style="float:right">
<input type="submit" name="delete" value='Delete'
onClick="return confirm('Are you sure you want to delete?')" />
<input type="hidden" name="_method" value="DELETE"/>
</form>
此代码易受sql注入攻击。请使用准备好的语句,例如knex.jsIt,它不是真实的,只是一个类的脱机项目,让我们了解nodejsok,但与您的问题相关,我们需要查看调用端点的代码。我还建议打开chrome/ie/firefox开发工具(网络选项卡)当您单击“删除”查看实际发送的内容时-例如,如果id不是一个数字怎么办?@Catalyst您是指ejs文件吗?我发布了它,我想我错过了它-但是,您确定%item.id%
具有正确的值吗?在网络调用中,您是否看到传递了正确的id?
app.get('/edit/(:id)', function(req, res, next) {
req.getConnection(function(error, conn) {
conn.query(
'SELECT * From store Where id = ' + req.params.id, function(err, rows, field) {
// if item not found
if (rows.length <= 0) {
req.flash('error', 'Item not found with id = ' +
id )
res.redirect('store/edit')
} else { // if item found
// render to views/store/edit.ejs template file
res.render( 'store/edit' , {
title: 'Edit Item',
id: req.params.id,
qty:rows[0].qty ,
price: rows[0].price,
sname: rows[0].sname
})
}
})
})
})
app.put('/edit/(:id)', function(req, res, next) {
req.assert('sname', 'Name is required').notEmpty()
//Validate name
req.assert('qty', 'Quantity is required').notEmpty()
//Validate qty
req.assert('price', 'Price is required').notEmpty()
//Validate price
var errors = req.validationErrors()
if (!errors) { //No errors were found. Passed Validation!
var item = {
sname: req.sanitize('sname').escape().trim(),
qty: req.sanitize('qty').escape().trim(),
price: req.sanitize('price').escape().trim()
}
req.getConnection(function(error, conn) {
conn.query('Update store set ? where id =' + req.params.id, item, function(err, result) {
if (err) {
req.flash('error', err)
// render to views/store/edit.ejs
res.render('store/edit', {
id: req.params.id,
sname: item.sname,
qty: item.qty,
price: item.price
})
} else {
req.flash('success', 'Data updated successfully!')
// render to views/store/edit.ejs
res.render('store/edit', {
title: 'Edit Item',
id: req.params.id,
sname: item.sname,
qty: item.qty,
price: item.price
})
}
})
})
}
else {
var error_msg = ''
errors.forEach(function(error) {
error_msg += error.msg + '<br>'
})
req.flash('error', error_msg)
res.render( '/store/edit', {
title: 'Edit Item,',
id: req.params.id,
sname: req.body.sname,
qty: req.body.qty,
price: req.body.price ,
})
}
})
<form method="post" action="/store/delete/<%= item.id %>"
style="float:right">
</form>
<input type="submit" name="delete" value='Delete'
onClick="return confirm('Are you sure you want to delete?')" />
<input type="hidden" name="_method" value="DELETE"
<form method="post" action="/store/delete/<%= item.id %>"
style="float:right">
<input type="submit" name="delete" value='Delete'
onClick="return confirm('Are you sure you want to delete?')" />
<input type="hidden" name="_method" value="DELETE"/>
</form>