【问题标题】:Javascript CRUD Admin for Spring-Data HATEOAS backend用于 Spring-Data HATEOAS 后端的 Javascript CRUD 管理员
【发布时间】:2016-01-19 01:22:52
【问题描述】:

我们正在使用 Spring-Boot Spring-Data 后端,该后端利用带有 @RepositoryRestResource 注释的 JPARepositories。我们希望通过 javascript 前端管理这些存储库(例如 CRUD)中的表,而无需进行编码工作。我们研究了各种替代方案,例如 LightAdmin、JHipster 和 ng-admin。

我们无法让 LightAdmin 工作,因为它依赖的 Spring-Data 版本比我们运行的版本要旧得多。它与最新最好的 Spring-Data 版本不兼容。

我们尝试了 JHipster,但它搭建了所有我们不想要的服务和控制器,因为 @RepositoryRestResource 免费提供给您。

我们尝试使用 ng-admin,但它在 HATEOAS 的上下文中效果不佳;我们必须投入太多的映射才能让它只能部分工作。

所以我的问题是这样的。是否有类似于 ng-admin、JHipster 和 LightAdmin 的产品,可以让我们轻松地对 @RepositoryRestResource JPA 存储库进行 CRUD,这样我们就不必编写样板 CRUD 代码?

【问题讨论】:

  • 你最终为 CRUD 管理员选择了什么?

标签: spring-data jhipster hateoas ng-admin lightadmin


【解决方案1】:
may be you can use my awesome code :


db.js 

const sqlite3 = require("sqlite3").verbose()
const db = new sqlite3.Database("./book.db")

module.exports = db

setup.js

const db = require("./db.js")

const query = [
    `
    CREATE TABLE IF NOT EXISTS
    contacts (
        contactID  INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
        name TEXT,
        company TEXT,
        telephone TEXT,
        email TEXT UNIQUE
    )`,
    `
    CREATE TABLE IF NOT EXISTS
    groups (
        groupID  INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
        name TEXT
    )`,
    `
    CREATE TABLE IF NOT EXISTS
    group_contacts (
        group_contactsID  INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
        contactID INTEGER NOT NULL,
        groupID INTEGER NOT NULL,
        FOREIGN KEY(contactID) REFERENCES contacts(contactID),
        FOREIGN KEY(groupID) REFERENCES groups(groupID)

    )`
]

for (let i = 0; i < query.length; i++){
    db.run(query[i], (err) =>{
        console.log(err)
    })
}

index.js

const controller = require("./controller.js")
let input = process.argv.slice(2)
let cmd = input[0]
let data = input.slice(1)

switch(cmd){
    case "createContact":
    controller.createContact(data)
    break

controller.js

const contact = require("./model/contact.js")
const group = require("./model/group.js")
const groupContact = require("./model/contact-group.js")
const view = require("./view.js")
class Controller{
    static createContact(data){
        contact.create(data, (err, output) => {
            if (err){
                view.createError(err)
            } else {
                view.createSuccess(output)
            }
        })
    }
    static readContact(data){
        contact.read(data, (err, output) => {
            if (err){
                view.readError(err)
            } else {
                view.readSuccess(output)
            }
        })  
    }
    static updateContact(data){
        contact.update(data, (err) => {
            if (err){
                view.updateError(err)
            } else {
                view.updateSuccess(data)
            }
        })
    }
    static deleteContact(data){
        contact.delete(data, (err) => {
            if (err){
                view.deleteError(err)
            } else {
                view.deleteSuccess(data[0])
            }
        })
    }
}
module.exports = Controller

model.js

const db = require("../db.js")
class Contact{
    constructor(name, company, phone, email){
        this.name = name
        this.company = company
        this.telephone = phone
        this.email = email
    }
    static create(data, cb){
        db.serialize((err) => {
            if (err){
                cb(err, null)
            } else {
                let newContact = new Contact(data[0], data[1], data[2], data[3])
                let query = `
                INSERT INTO contacts (name, company, telephone, email) 
                VALUES ('${data[0]}', '${data[1]}', '${data[2]}', '${data[3]}')`
                db.run(query, (err) => {
                    if (err){
                        cb(err, null)
                    } else {
                        cb(null, newContact)
                    }
                })
            }
        })
    }
    static update(data, cb){
        db.serialize((err) => {
            if (err){
                cb(err, null)
            } else {
                let query = `
                UPDATE contacts SET ${data[1]} = '${data[2]}' WHERE contactID = ${data[0]}`
                db.get(query, (err) => {
                    if (err){
                        cb(err)
                    } else {
                        cb(null)
                    }
                })
            }
        })
    }
    static read(data, cb){
        db.serialize((err) => {
            if (err){
                cb(err, null)
            } else {
                let query = `
                SELECT contactID, name, company, telephone, email FROM contacts WHERE contactID = ${data[0]}`
                db.get(query, (err, result) => {
                    if (err){
                        cb(err, null)
                    } else {
                        cb(null, result)
                    }
                })
            }
        })
    }
    static delete(data, cb){
        db.serialize((err) => {
            if (err){
                cb(err, null)
            } else {
                let query = `
                DELETE FROM contacts WHERE contactID = ${data[0]}`
                db.get(query, (err) => {
                    if (err){
                        cb(err)
                    } else {
                        cb(null)
                    }
                })
            }
        })
    }
}

module.exports = Contact

view.js


class View {
    static createError(err){
        console.log(err)
        console.log('=====> ERROR')
    }
    static createSuccess(output){
        console.log(output)
        console.log('=====> SUCCESS')
    }
    static readError(err){
        console.log(err)
        console.log('=====> ERROR')
    }
    static readSuccess(output){
        console.log(output)
        console.log('=====> SUCCESS')
    }
    static updateError(err){
        console.log(err)
        console.log('=====> ERROR')
    }
    static updateSuccess(output){
        console.log(output)
        console.log('=====> SUCCESS')
    }
    static deleteError(err){
        console.log(err)
        console.log('=====> ERROR')
    }
    static deleteSuccess(output){
        console.log(output)
        console.log('=====> SUCCESS')
    }
    static undefined(output){
        console.log(output)
        console.log('=====> UNDEFINED')
    }

}

module.exports = View

【讨论】:

  • 你应该edit你的答案包括一些解释或上下文,说明这是如何回答问题的。对于以后可能遇到相同问题的人来说,巨大的代码块不会立即有用。
猜你喜欢
  • 2019-02-06
  • 1970-01-01
  • 2013-10-31
  • 2014-03-07
  • 2018-07-23
  • 2014-08-16
  • 2014-07-05
  • 2021-04-24
相关资源
最近更新 更多