首先,你需要使用
Promise
类并将一个函数传递给它,该函数得到两个参数,第一个是
resolve
第二个是
reject
. 在函数体中,我们运行
callback-based
函数,在回调中我们检查,如果有任何错误,我们调用
拒绝
error
决定
所以我们创造了一个
承诺
.then
在
insertresult
成功和成功的变量
.catch
出错时。
router.post('/inventory/product/add', authenticationMiddleware(), function(req, res, next) {
// Validate data
req.assert('productslug', 'Product Slug is required').notEmpty()
req.assert('productcat', 'Product Category is required').notEmpty()
req.assert('productorigin', 'Product Inspiration is required').notEmpty()
req.assert('productname', 'Product Name is required').notEmpty()
req.assert('productprice', 'Product Price is required').notEmpty()
req.assert('productdesc', 'Product Description is required').notEmpty()
var errors = req.validationErrors()
// No errors were found. Passed Validation!
if (!errors) {
var product = {
productslug: req.sanitize('productslug').escape().trim(),
productcat: req.sanitize('productcat').escape().trim(),
productorigin: req.sanitize('productorigin').escape().trim(),
productname: req.sanitize('productname').escape().trim(),
productprice: req.sanitize('productprice').escape().trim(),
productdesc: req.sanitize('productdesc').escape().trim()
}
const db = require('../db.js')
let sql = `INSERT INTO inventory_tbl(product_slug, product_category, product_origin, product_name, product_price, product_cog, product_desc, total_stock) VALUES (?, ?, ?, ?, ?, ?, ?, ?);`
const insertResult = new Promise((resolve, reject) => {
db.query(sql, [product.productslug, product.productcat, product.productorigin, product.productname, product.productprice, 0, product.productdesc, 0], (error, results, fields) => {
if (error) reject(error)
else resolve(results)
}
});
insertResult.then(result => {
req.flash('success', 'Data added successfully!')
res.render('admin/inventory/product/add', {
title: 'Perry in Disguise | Add Product',
productslug: product.productslug,
productcat: product.productcat,
productorigin: product.productorigin,
productname: product.productname,
productprice: product.productprice,
productdesc: product.productdesc
})
}).catch(error => {
req.flash('error', error)
// render to views/inventory/product/add.ejs
res.render('admin/inventory/product/add', {
title: 'Perry in Disguise | Add Product',
productslug: product.productslug,
productcat: product.productcat,
productorigin: product.productorigin,
productname: product.productname,
productprice: product.productprice,
productdesc: product.productdesc
})
});
} else {
// Display errors to the user
var error_msg = ''
errors.forEach(function(error) {
error_msg += error.msg + '<br>'
})
req.flash('error', error_msg)
// Using req.body.name
// because req.param('name') is depreciated
res.render('admin/inventory/product/add', {
title: 'Perry in Disguise | Add Product',
productslug: req.body.productslug,
productcat: req.body.productcat,
productorigin: req.body.productorigin,
productname: req.body.productname,
productprice: req.body.productprice,
productdesc: req.body.productdesc
})
}
})