【发布时间】: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 docshttp://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