0

我有一张表 -available_trucks我想在其中更新列 - available_date。我计划每天午夜更新这个可用日期,但现在出于测试目的,我尝试使用 nodejs 中的这个库每隔一分钟更新一次

https://www.npmjs.com/package/node-schedule

我也使用 knex js 作为 sql builder。

我的代码

服务器 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();
}) 

卡车工作

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;

4

1 回答 1

0

根据我的短暂经验,由于某些奇怪的原因,使用knex进行更新仅在后跟.catch()时才有效

一般示例:

不工作

knex('table')
  .update({column: value})
  .where({column: value});

作品

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));
于 2021-11-05T12:36:56.697 回答