我在knex js中的更新功能不起作用



我有一个表-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(执行的原因。

最新更新