【问题标题】:"error": "select * from `alliance` where `alliance_description` = {} - SQLITE_ERROR: no such table: alliance“错误”:“从 `alliance` 中选择 *,其中 `alliance_description` = {} - SQLITE_ERROR:没有这样的表:联盟
【发布时间】:2021-08-02 04:48:07
【问题描述】:

问题 => "error": "select * from alliance where alliance_description = {} - SQLITE_ERROR: no such table: Alliance"

$ npm run start:dev

> rest-api@1.0.0 start:dev D:\OSSE\back-end
> nodemon src/server.js

[nodemon] 2.0.7
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,json
[nodemon] starting `node src/server.js`
migrations [ 2, [] ]
Listening on Port 5000!
sqlite does not support inserting default values. Set the `useNullAsDefault` flag to hide this warning. (see docs

http://knexjs.org/#Builder-insert)。 获取/联盟 500 149.999 毫秒 - 110 sqlite 不支持插入默认值。设置useNullAsDefault 标志以隐藏此警告。 (见文档 http://knexjs.org/#Builder-insert)。 获取/联盟 500 6.629 毫秒 - 110 获取 /favicon.ico 404 0.703 毫秒 - 40

Knex.js 配置

const path = require('path')

require('dotenv').config()

const {
  DATABASE_URL = 'postgresql://postgres@localhost/postgres',
} = process.env

module.exports = {
  development: {
    client: 'postgresql',
    connection: DATABASE_URL,
    pool: { min: 0, max: 100 },
    migrations: {
      directory: path.join(__dirname, 'src', 'db', 'migrations'),
    },
    seeds: {
      directory: path.join(__dirname, 'src', 'db', 'seeds'),
    },
    useNullAsDefault: true,
  },

  production: {
    client: 'postgresql',
    connection: DATABASE_URL,
    pool: { min: 0, max: 100 },
    migrations: {
      directory: path.join(__dirname, 'src', 'db', 'migrations'),
    },
    seeds: {
      directory: path.join(__dirname, 'src', 'db', 'seeds'),
    },
    useNullAsDefault: true,
  },

  test: {
    client: 'sqlite3',
    connection: {
      filename: ':memory:',
    },
    migrations: {
      directory: path.join(__dirname, 'src', 'db', 'migrations'),
    },
    seeds: {
      directory: path.join(__dirname, 'src', 'db', 'seeds'),
    },
    useNullAsDefault: true,
  },
}

Knex 连接

const env = process.env.NODE_ENV || 'development'
const config = require('../../knexfile')[env]
const knex = require('knex')(config)

module.exports = knex

Alliance.controller

const service = require('./alliance.service')
const wrapper = require('../errors/asyncErrorBoundary')

const list = async (req, res, next) => {
  const { alliance_description } = req.query
  const data = await service.list(req.query)
  if (alliance_description) {
    const data = await service.list(alliance_description)
    res.json({
      data: alliance_description,
    })
    return
  }
  return res.json({ data })
}

function allianceExists(req, res, next) {
  const allianceId = req.params.alliance_id
  const foundAlliance = alliance.find(
    (alliances) => alliances.id === alliance_id
  )
  if (foundAlliance) {
    res.locals.dish = foundAlliance
    return next()
  }
  next({
    status: 404,
    message: `Alliance ID ${allianceId} Doesn't Exist`,
  })
}

function checkAllianceId(req, res, next) {
  const allianceId = req.params.alliance_id
  const id = req.body.data.id
  if (allianceId !== id && id !== undefined && (id !== '') & (id !== null)) {
    return next({
      status: 400,
      message: `Alliance ID does not match route id. Alliance: ${id}, Route: ${allianceId}`,
    })
  }
  return next()
}

const update = async (req, res, next) => {
  const { alliance_id } = req.params
  const data = await service.update(alliance_id, req.body.data)
  res.status(200).json({
    data: data[0],
  })
}

const create = async (req, res, next) => {
  const newAlliance = res.locals.validAlliance
  const newRes = await service.create(newAlliance)
  res.status(201).json({ data: newRes[0] })
}

const show = async (req, res, next) => {
  const data = await service.show()
  return res.json({ data })
}

const read = async (req, res, next) => {
  const alliances = res.locals.alliance
  res.status(200).json({ data: alliance[0] })
}

const isValid = (req, res, next) => {
  if (!req.body.data)
    return next({ status: 400, message: 'No alliance selected' })
  const { alliance_name, alliance_description } = req.body.data
  const requiredFields = ['alliance_name', 'alliance_description']
  for (const field of requiredFields) {
    if (!req.body.data[field]) {
      return next({ status: 400, message: `Invalid input for ${field}` })
    }
  }
  res.locals.validAlliance = req.body.data
  next()
}

const destroy = async (req, res) => {
  const { alliance_id } = rq.params
  const des = await service.destroy(alliance_id)
  res.status(200)
}

module.exports = {
  list: [wrapper(list)],
  show: [wrapper(show)],
  read: [wrapper(checkAllianceId), wrapper(allianceExists), wrapper(read)],
  create: [wrapper(isValid), wrapper(create)],
  update: [wrapper(isValid), wrapper(allianceExists), wrapper(update)],
  destroy: [wrapper(destroy)],
}

Alliance.Router

const router = require('express').Router()
const controller = require('./alliance.controller')
const methodNotAllowed = require('../errors/methodNotAllowed')

router.route('/').get(controller.list).all(methodNotAllowed)

router
  .route('/:allianceId')
  .get(controller.list)
  .post(controller.create)
  .put(controller.update)
  .all(methodNotAllowed)

router
  .route('/:allianceId/:userId')
  .get(controller.list)
  .put(controller.update)
  .delete(controller.destroy)
  .all(methodNotAllowed)

module.exports = router

联盟服务

const { default: knex } = require('knex')

const listAlliancesById = (knex, allianceId) =>
  knex('alliances as a').where({ 'a.alliance_id': allianceId })

const list = (alliance_description) => {
  return knex('alliance')
    .select('*')
    .from('alliance')
    .where({ alliance_description: alliance_description })
  // .orderBy('alliance_id')
}

const show = () => {
  return knex('alliance').select('*')
}

const read = (alliance_id) => {
  return knex('alliance').select('*').where({ alliance_id: alliance_id })
}

const create = (alliance) => {
  return knex('alliance').insert(alliance, '*')
}
const update = (alliance_id, updatedAlliance) => {
  return knex('alliance')
    .where({ alliance_id: alliance_id })
    .update(updatedAlliance)
    .returning('*')
}

const destroy = (alliance) => {
  return knex('alliance').delete(alliance).returning('*')
}

module.exports = {
  list,
  show,
  read,
  create,
  listAlliancesById,
  update,
  destroy,
}

数据库查询

希望有人能帮我解决这个问题。

【问题讨论】:

    标签: javascript node.js postgresql express knex.js


    【解决方案1】:

    您从 sqlite dbms 收到错误:

    SQLITE_ERROR:没有这样的表:联盟”

    您的应用肯定连接到 sqlite 而不是 postgresql 服务器,它无法在其中找到该表。

    因此请查看您的配置/连接字符串,以了解您的 knex 应用程序从何处读取数据库连接

    【讨论】:

      【解决方案2】:

      我解决了:

      const { default: knex } = require('knex')
      const knex = require(../db/connection) // <==== ANSWER
      
      // was missing out of the .service file
      

      【讨论】:

        猜你喜欢
        • 2019-03-11
        • 2018-01-17
        • 2023-01-24
        • 2018-04-07
        • 2020-10-17
        • 1970-01-01
        • 2011-03-19
        • 1970-01-01
        • 2015-05-11
        相关资源
        最近更新 更多