electron项目用Sequelize连接数据库sqlite3(二)

前面写了一篇文章electron-vue构建桌面应用(一),我们有了项目的基本结构:main:主进程;renderer:渲染进程。
本篇介绍如何在主进程中连接数据库,并用express生成路由让客户端访问。

一、用Sequelize连接数据库

Sequelize是基于Promise的Node.js的ORM框架。
ORM即Object-Relationl Mapping,它的作用是在关系型数据库和对象之间作一个映射:
在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。
Sequelize官方GitHub:https://github.com/sequelize/sequelize
Sequelize官方中文文档:https://github.com/demopark/sequelize-docs-Zh-CN
Sequelize官方英文文档:http://docs.sequelizejs.com/

我参考的官方中文文档,里面的步骤非常详细,按步骤即可实现:
electron项目用Sequelize连接数据库sqlite3(二)
第一步、Getting Started - 入门下载依赖
npm install --save sequelize
还必须手动为所选数据库安装驱动程序:
$ npm install --save sqlite3(因为我的项目用的数据库是sqlite3)
electron项目用Sequelize连接数据库sqlite3(二)
第二步、连接到数据库
electron项目用Sequelize连接数据库sqlite3(二)

在主进程main文件夹中创建文件夹:server
在server中创建文件:sequelizeConnectDb.js
sequelizeConnectDb.js文件内容:

const { Sequelize } = require('sequelize');

const sequelize = new Sequelize({
  dialect: 'sqlite',
  storage: 'D:/sqliteDb/archives.db';//我这里用的是绝对路径
});


//使用 .authenticate() 函数测试连接是否正常
sequelize.authenticate().then(() => {
  console.log('Connection has been established successfully.')
}).catch(err => {
  console.error('Unable to connect to the database:', err)
})

module.exports = sequelize;

electron项目用Sequelize连接数据库sqlite3(二)
第三步、定义模型
在已创建的server文件中创建文件夹:model;
在model中创建一个文件:basicModel.js
electron项目用Sequelize连接数据库sqlite3(二)
basicModel.js文件:

const { Sequelize } = require('sequelize');
const db = require('../sequelizeConnectDb.js')

//模型是 Sequelize 的本质. 模型是代表数据库中表的抽象
const basicModel = db.define('basic_info_audit_tb', {
    name: {
        type: Sequelize.STRING,
        field: 'person_id'
    },//表中字段都要列出来
}, {
    timestamps: false,
    paranoid: true,
    underscored: true,
    freezeTableName: true,
    tableName: 'basic_info_audit_tb'
})
module.exports = basicModel

二、用express构建web服务器

express介绍
Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。

使用 Express 可以快速地搭建一个完整功能的网站。

Express 框架核心特性:

1.可以设置中间件来响应 HTTP 请求。

2.定义了路由表用于执行不同的 HTTP 请求动作。

3.可以通过向模板传递参数来动态渲染 HTML 页面。
第一步、下载依赖
npm install --save express
以下几个重要的模块是需要与 express 框架一起安装的:

1、body-parser - node.js 中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据。
2、cookie-parser - 这就是一个解析Cookie的工具。通过req.cookies可以取到传过来的cookie,并把它们转成对象。
3、multer - node.js 中间件,用于处理 enctype=“multipart/form-data”(设置表单的MIME编码)的表单数据。

$ npm install body-parser --save
$ npm install cookie-parser --save
$ npm install multer --save
第二步、创建路由容器(router是有中间件和HTTP方法路由(如get,put,post,等))
electron项目用Sequelize连接数据库sqlite3(二)
basic.js 中:

//引入定义的模型(即数据库中的某个表)
var basicModel = require('../../server/model/basicModel.js')
var express = require('express');

// 1. 创建一个路由对象


var router = express.Router()

router.get('/basicList', function (req, res, next) {
	//findAll是squelize的查询语句,还可以进行增删改操作,具体的可以查看官网介绍
    basicModel.findAll().then(resData => {
        res.send(resData)
    })
})

module.exports = router;

expressApp.js中:

var express = require('express');
var app = express()

const server = function () {
    app.disable('etag');//接口报304,加上这句就解决了
    //解决跨域
    app.all('*', function (req, res, next) {
        //设为指定的域
        res.header('Access-Control-Allow-Origin', "*");
        res.header("Access-Control-Allow-Headers", "X-Requested-With");
        res.header('Access-Control-Allow-Headers', 'Content-Type');
        res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
        res.header('Access-Control-Allow-Credentials', true);
        res.header("X-Powered-By", ' 3.2.1');
        next();
    });
    
    app.use(require('./routes/basic'));//引入路由模块文件

    app.listen(9008, () => {
        console.log(`Server started on port 9008`)
    })
}
module.exports = server

然后在主进程中的index.js中引入expressApp.js就可以了,index.js中部分代码如下:

import { app, BrowserWindow } from 'electron'
import serverApp from './server/expressApp'//引入路由模块
function createWindow () {
  /**
   * Initial window options
   */
  mainWindow = new BrowserWindow({
    height: 563,
    useContentSize: true,
    width: 1000
  })

  mainWindow.loadURL(winURL)

  mainWindow.on('closed', () => {
    mainWindow = null
  })
  serverApp()//执行路由模块
}
上一篇:NodeJS的Sequelize与Sequelize-cli入门


下一篇:在EggJS中使用Sequelize做联表查询[转载]