- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
路线代码
router.post('/add', function(req, res) {
const compulsoryFields = ['primary_id', 'secondary_id', 'assessment_note_id', 'packing_list_id', 'model_id']
for(var i = 0; i < compulsoryFields.length; i++) {
if(req.body[compulsoryFields[i]] == '') {
req.flash('warning_msg', 'Please make sure all * fields are supplied')
res.redirect('/rmv/add')
return
}
}
async.series([
function(callback) {
Vehicle.existsByPrimaryId(req.body.primary_id, callback)
}, function(callback) {
Vehicle.existsBySecondaryId(req.body.secondary_id, callback)
}
], function(err, details) {
if(!details[0]) {
if(!details[1]) {
var vehicle = { id: null }
for(var key in req.body) {
vehicle[key] = req.body[key]
}
async.series([
function(callback) {
Vehicle.add(vehicle, callback)
}
], function(err, details_l2) {
if(details_l2[0]) {
req.flash('warning_msg', 'Vehicle added successfully')
res.redirect('/rmv/add')
} else {
req.flash('warning_msg', 'Error occured while adding vehicle. Please try again')
res.redirect('/rmv/add')
}
})
} else {
req.flash('warning_msg', 'Chassis/Frame number already exists')
res.redirect('/rmv/add')
}
} else {
req.flash('warning_msg', 'Engine/Motor number already exists')
res.redirect('/rmv/add')
}
})
})
型号代码
const MySql = require('../comms/rmv_mysql_con')
const Vehicle = module.exports = {}
Vehicle.add = function(vehicle, callback) {
MySql.pool.getConnection(function(pool_err, connection){
connection.query('INSERT INTO vehicle SET ?', vehicle, function(err, result) {
connection.release()
if(err) {
return callback(err, false)
}
callback(err, true)
})
})
}
Vehicle.getCount = function(callback) {
MySql.pool.getConnection(function(pool_err, connection) {
connection.query('SELECT COUNT(*) AS \'vehicle_count\' FROM vehicle', function(err, rows) {
connection.release()
if(err) {
return callback(err, false)
}
callback(err, rows[0]['vehicle_count'])
})
})
}
Vehicle.search = function(skw, callback) {
MySql.pool.getConnection(function(pool_err, connection){
connection.query('SELECT vehicle.*, primary_name, secondary_name, name FROM vehicle, model WHERE vehicle.model_id = model.id AND CONCAT(model_id, packing_list_id, assessment_note_id, primary_id, secondary_id, sale_date, customer_first_name, customer_last_name, customer_phone_number, customer_address_no, customer_address_street, customer_address_district, customer_nic, rmv_documents_received_date, rmv_documents_sent_date, cr_received_date, plate_number, plate_sent_date, cr_sent_date, remarks) LIKE \'%' + skw + '%\'', function(err, rows, fields) {
connection.release()
if(err) {
return callback(err, false)
}
callback(err, rows)
})
})
}
Vehicle.existsByPrimaryId = function(id, callback) {
MySql.pool.getConnection(function(pool_err, connection){
connection.query('SELECT * FROM vehicle WHERE primary_id = ?', id, function(err, rows, fields) {
connection.release()
if(rows.length > 0) {
return callback(err, true)
}
callback(err, false)
})
})
}
Vehicle.getAll = function(callback) {
MySql.pool.getConnection(function(pool_err, connection){
connection.query('SELECT vehicle.*, primary_name, secondary_name, name FROM vehicle, model WHERE vehicle.model_id = model.id', function(err, rows, fields) {
connection.release()
if(err) {
return callback(err, false)
}
callback(err, rows)
})
})
}
Vehicle.updateById = function(vehicle, id, callback) {
MySql.pool.getConnection(function(pool_err, connection){
connection.query('UPDATE vehicle SET ? WHERE id = ?', [vehicle, id], function(err, result) {
connection.release()
if(err) {
return callback(err, false)
}
callback(err, true)
})
})
}
Vehicle.getVehicleById = function(id, callback) {
MySql.pool.getConnection(function(pool_err, connection){
connection.query('SELECT vehicle.id, primary_id, sale_date, customer_first_name, customer_last_name, customer_phone_number, customer_address_no, customer_address_street, customer_address_district, customer_nic, rmv_documents_received_date, rmv_documents_sent_date, cr_received_date, plate_number, plate_sent_date, cr_sent_date, remarks, primary_name, secondary_name FROM vehicle, model WHERE vehicle.model_id = model.id AND vehicle.id = ?', id, function(err, rows, fields) {
connection.release()
if(err) {
return callback(err, false)
}
callback(err, rows)
})
})
}
Vehicle.existsBySecondaryId = function(id, callback) {
MySql.pool.getConnection(function(pool_err, connection){
connection.query('SELECT * FROM vehicle WHERE secondary_id = ?', id, function(err, rows, fields) {
connection.release()
if(rows.length > 0) {
return callback(err, true)
}
callback(err, false)
})
})
问题是,当添加 5-10 个请求后,服务器会挂起快速调试的输出,如下
/rmv/add
express:router router : /rmv/add +0ms
express:router dispatching POST /rmv/add +0ms
express:router trim prefix (/rmv) from url /rmv/add +0ms
express:router router /rmv : /rmv/add +0ms
express:router dispatching POST /add +0ms
express:router <anonymous> : /rmv/add +0ms
express:router <anonymous> : /rmv/add +1ms
express:router <anonymous> : /rmv/add +0ms
express:router dispatching GET /rmv/add +134ms
express:router query : /rmv/add +0ms
express:router expressInit : /rmv/add +0ms
express:router jsonParser : /rmv/add +0ms
express:router urlencodedParser : /rmv/add +0ms
express:router cookieParser : /rmv/add +0ms
express:router serveStatic : /rmv/add +0ms
express:router session : /rmv/add +4ms
express:router initialize : /rmv/add +0ms
express:router authenticate : /rmv/add +0ms
express:router <anonymous> : /rmv/add +4ms
express:router <anonymous> : /rmv/add +0ms
/rmv/add
express:router router : /rmv/add +1ms
express:router dispatching GET /rmv/add +0ms
express:router trim prefix (/rmv) from url /rmv/add +0ms
express:router router /rmv : /rmv/add +0ms
express:router dispatching GET /add +0ms
express:router <anonymous> : /rmv/add +0ms
express:router <anonymous> : /rmv/add +0ms
express:router <anonymous> : /rmv/add +0ms
当服务器挂起时,我发出的每个请求都会被卡住,除了那些不使用 asyncjs 的请求。服务器重新启动后工作正常,但在收到 5-10 个添加 post 路由的请求后问题再次出现。
最佳答案
不知道它是否来自这里,但在您的车辆模型的方法中,如果当您尝试连接池时 Mysql 返回错误,您还应该返回回调。
也许可以记录这些错误来测试错误是否来自这里。因为如果一个回调未解析,那么您将无法访问 async.series 方法的最终函数。
async.series([
function(callback) {
Vehicle.existsByPrimaryId(req.body.primary_id, callback)
}, function(callback) {
Vehicle.existsBySecondaryId(req.body.secondary_id, callback)
}
], function() {
// can't access this if there is a pool error with
// vehicle.existsByPrimaryId or Vehicle.existsBySecondaryId,
// since callback is not resolved
});
之前:
Vehicle.updateById = function(vehicle, id, callback) {
MySql.pool.getConnection(function(pool_err, connection){
connection.query('UPDATE vehicle SET ? WHERE id = ?', [vehicle, id], function(err, result) {
connection.release()
if(err) {
return callback(err, false)
}
callback(err, true)
})
})
}
之后:
Vehicle.updateById = function(vehicle, id, callback) {
MySql.pool.getConnection(function(pool_err, connection){
if (poll_err) {
return callback(poll_err, false);
}
connection.query('UPDATE vehicle SET ? WHERE id = ?', [vehicle, id], function(err, result) {
connection.release()
if(err) {
return callback(err, false)
}
callback(err, true)
})
})
}
关于javascript - NodeJS Express 服务器停留在 AsyncJS 系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44681132/
我正在尝试合并两个 JSON 文件(客户列表)中的数据,然后创建与客户一样多的任务,以便稍后通过 async.js 执行 为了让所有任务数组填满,我用一个 promise 来控制 forEach 的结
我希望使用 Nodejs 和 Async 做一些相当简单的事情。 我有很多页面,在我们的示例中假设有 4 个页面。我想发出4次请求,然后当它们全部返回时触发回调。 async.eachSeries
我有以下使用 async.js 的代码 var async = require('async'); var A = []; for(var i = 1; i < 100; i++) A.pus
我想编写一个通过多个同步调用来调用自身的函数(此处的代码只是流程的一个精简示例)。问题是nodeJS给了我一个“TypeError:asyncCb不是一个函数”。 我研究了这个错误,似乎参数返回了函数
路线代码 router.post('/add', function(req, res) { const compulsoryFields = ['primary_id', 'secondary
我想在我的 Mocha 测试中保存两个 Mongoose 对象 - 并在两者都成功时收到通知。我正在使用 asyncjs 库来实现此目的。 beforeEach (done) -> obj1 =
我是一名优秀的程序员,十分优秀!