我有一个表-available_trucks
,我想在其中更新列-available_date
。这个可用日期我计划每天午夜更新,但现在出于测试目的,我尝试在nodejs 中每一分钟更新一次这个库
https://www.npmjs.com/package/node-schedule
我也使用knex js作为sql生成器。
我的代码
服务器JS(主文件(
const truckJob = require('./jobs/trucks-job');
schedule.scheduleJob('*/1 * * * *', (fireDate) => {
console.log('This job was supposed to run at ' + fireDate + ', but actually ran at ' + new Date());
truckJob.updateAvailableTrucks();
})
TRUCKS-JOB
const db = require('../db/knex');
function updateAvailableTrucks() {
db("available_trucks").update('available_date', '2020-12-13T04:47:56.126').where('truck_number',
'228');
}
因此,出于测试目的,我在这里放置硬编码的日期值,其中truck_number
是228。我想提到的是,我检查了available_trucks
-表中的数据,所以这里我尝试更新表中现有的列。但是一分钟后,当再次执行脚本时,表中的列不会更新。此外,当我尝试从某个表中获取数据时,一切都很好。例如
function getAll() {
return db.select('*').from('available_trucks');
}
我的knex配置KNEX JS
const config = require('../knexfile.js');
const pg = require('pg');
const PG_DECIMAL_OID = 1700;
// workaround that ensures numeric types are read as numbers, not strings
pg.types.setTypeParser(PG_DECIMAL_OID, parseFloat);
module.exports = require('knex')(config);
KNEX文件JS
const config = {
client: 'pg',
connection: {
host: process.env.POSTGRES_HOST || 'localhost',
database: process.env.POSTGRES_DB || 'some_db_name',
user: process.env.POSTGRES_USER || 'postgres',
password: process.env.POSTGRES_PASSWORD || 'xx
},
pool: { min: 0, max: 10 },
migrations: { directory: './db/migrations' }
};
module.exports = config;
根据我短暂的经验,出于某种奇怪的原因,使用knex的更新只有在遵循.catch((时才有效
一般示例:
不工作
knex('table')
.update({column: value})
.where({column: value});
Works
knex('table')
.update({column: value})
.where({column: value})
.catch((err) => console.log(err));
在您的情况下,请尝试:
db("available_trucks")
.update('available_date', '2020-12-13T04:47:56.126')
.where('truck_number',
'228')
.catch((err) => console.log(err));
在调用数据库更新时,updateAvailableTrucks((函数似乎缺少一个wait语句。由于knex返回一个promise,您需要等待它,或者使用.then((、.catch((或.finally((来处理结果。这些方法或使用等待是触发Promise(以及一般的Promise(执行的原因。