• 4.9 nodejs操作多种数据库


    1、目录结构

    2、从mysql中取数据

    npm install mysql

    config/mysql_config.js

    1. module.exports = {
    2. options: {
    3. host: '192.168.3.74',
    4. user: 'root',
    5. password: '123456',
    6. database: 'testdata'
    7. },
    8. sql: 'select * from testdata_check',
    9. }

    mysql/read_mysql.js

    1. const mysql = require('mysql')
    2. let connect = (options) => {
    3. let connection = mysql.createConnection(options)
    4. return new Promise((resolve, reject) => {
    5. connection.connect(function (err) {
    6. if (err) {
    7. console.error('error connecting: ' + err.stack);
    8. return;
    9. }
    10. console.log('mysql connected as id ' + connection.threadId);
    11. resolve(connection)
    12. });
    13. })
    14. }
    15. let read = (connection, sql) => {
    16. return new Promise(((resolve, reject) => {
    17. connection.query(sql, function (err, results, filed) {
    18. resolve(results)
    19. })
    20. }))
    21. }
    22. module.exports = {
    23. connect,
    24. read
    25. }

    2、写入redis,存储为hash

    npm install redis

    redis/operate_redis.js

    1. const redis = require('redis')
    2. let con = (url) => {
    3. return new Promise((resolve, reject) => {
    4. let client = redis.createClient({url: url})
    5. client.on('error', (err) => console.log('Redis Client Error', err));
    6. client.on('connect', () => console.log('Redis Client Connected'))
    7. client.connect().then(r => {
    8. })
    9. resolve(client)
    10. })
    11. }
    12. let write = (con, arraylist) => {
    13. return new Promise((resolve, reject) => {
    14. for (let i in arraylist) {
    15. if (arraylist.hasOwnProperty(i)) {
    16. if (arraylist[i]['id'] && arraylist[i]['task_instance_id']) {
    17. con.hSet(arraylist[i]['id'], arraylist[i]['task_instance_id'], arraylist[i]['crawl_content']);
    18. }
    19. }
    20. }
    21. resolve(arraylist.length)
    22. })
    23. }
    24. module.exports = {
    25. con,
    26. write
    27. }

     run.js

    1. const {read, connect} = require('../mysql/read_mysql');
    2. const {write, con} = require('./operate_redis');
    3. const mysql_config = require('../config/mysql_config');
    4. const redis_config = require('../config/redis_config');
    5. (async () => {
    6. let c = await connect(mysql_config.options)
    7. let array = await read(c, mysql_config.sql)
    8. let redis_client = await con(redis_config.redis_url)
    9. await write(redis_client, array)
    10. await c.end()
    11. await redis_client.disconnect()
    12. })()

    config/redis_config.js

    1. module.exports = {
    2. redis_url: 'redis://10.7.128.15:6379'
    3. }

    3、写入mongodb

    npm install mongoose

    mongodb/write.js

    1. const mongoose = require('mongoose')
    2. let con = (url) => {
    3. return new Promise(((resolve, reject) => {
    4. mongoose.connect(url).then(r => {
    5. })
    6. let db = mongoose.connection;
    7. db.on('error', console.error.bind(console, 'connection error:'));
    8. db.once('open', function () {
    9. console.log('mongodb connected')
    10. });
    11. resolve(mongoose)
    12. }))
    13. }
    14. let create_schema = (obj) => {
    15. return new Promise(((resolve, reject) => {
    16. let test_schema = mongoose.Schema(obj)
    17. resolve(test_schema)
    18. }))
    19. }
    20. let create_model = (schema) => {
    21. return new Promise(((resolve, reject) => {
    22. let TestModel = mongoose.model('TestModel', schema)
    23. resolve(TestModel)
    24. }))
    25. }
    26. let save = (model, array) => {
    27. return new Promise(((resolve, reject) => {
    28. for (let i in array) {
    29. if (array.hasOwnProperty(i)) {
    30. let m = new model(array[i])
    31. m.save(function (err, m) {
    32. if (err) return console.log(err)
    33. else console.log('success')
    34. })
    35. }
    36. }
    37. }))
    38. }
    39. module.exports = {
    40. con,
    41. create_schema,
    42. create_model,
    43. save
    44. }

     mongodb/run.js

    1. const {con, create_model, create_schema, save} = require('./write');
    2. const mongo_config = require('../config/mongo_config');
    3. const mysql_config = require('../config/mysql_config');
    4. const {connect, read} = require('../mysql/read_mysql');
    5. (async () => {
    6. let c = await connect(mysql_config.options)
    7. let arr = await read(c, mysql_config.sql)
    8. let db = await con(mongo_config.mongo_url)
    9. let obj = {
    10. id: String,
    11. crawl_cfg_id: String,
    12. detection_type: String,
    13. crawl_file_info_id: String,
    14. task_instance_id: String,
    15. crawl_content: String,
    16. col6: String,
    17. col7: String,
    18. col8: String
    19. }
    20. let test_schema = await create_schema(obj)
    21. let TestModel = await create_model(test_schema)
    22. await save(TestModel, arr)
    23. await c.end()
    24. db.disconnect()
    25. })()

    config/mongo_config.js

    1. module.exports = {
    2. mongo_url: 'mongodb://10.7.128.16/testdata'
    3. }

    4、写入elastchsearch

    client方式

    npm install @elastic/elasticsearch

    1. const {Client } = require('@elastic/elasticsearch');
    2. (async ()=>{
    3. const client = new Client({node:'http://10.7.128.15:9200'})
    4. const result = await client.search({
    5. index:'index',
    6. type:'testdata'
    7. })
    8. await console.log(result.body)
    9. })()

    rest方式

    文档地址:https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/search_examples.html

    elastchsearch/write.js

    1. const axios = require('axios');
    2. const mysql_config = require('../config/mysql_config');
    3. const es_config = require('../config/elastchsearch_config')
    4. const {connect, read} = require('../mysql/read_mysql');
    5. let options = {
    6. mappings: {}
    7. }
    8. options.mappings[`${es_config.entity_name}`] = {
    9. properties: {
    10. id: {
    11. type: "text"
    12. },
    13. crawl_cfg_id: {
    14. type: "text"
    15. },
    16. detection_type: {
    17. type: "text"
    18. },
    19. crawl_file_info_id: {
    20. type: "text"
    21. },
    22. task_instance_id: {
    23. type: "text"
    24. },
    25. crawl_content: {
    26. type: "text"
    27. },
    28. col6: {
    29. type: "text"
    30. },
    31. col7: {
    32. type: "text"
    33. },
    34. col8: {
    35. type: "text"
    36. },
    37. }
    38. }
    39. let config = {
    40. method: 'put',
    41. url: '',
    42. headers: {},
    43. body: null
    44. };
    45. let createIndex = (config) => {
    46. return new Promise(((resolve, reject) => {
    47. config.body = options
    48. config.url = `${es_config.url}/${es_config.index_name}`
    49. axios(config).then().catch(err => {
    50. console.log('Index already exist')
    51. })
    52. resolve()
    53. }))
    54. }
    55. let save = (config, array) => {
    56. return new Promise((resolve, reject) => {
    57. for (let i in array) {
    58. if (array.hasOwnProperty(i)) {
    59. config.url = `${es_config.url}/${es_config.index_name}/${es_config.entity_name}/${Number.parseInt(i) + 1}`
    60. config.body = array[i]
    61. config.headers['content-type'] = 'application/json; charset=UTF-8'
    62. axios.put(config.url, config.body, config.headers).then()
    63. }
    64. }
    65. resolve()
    66. })
    67. };
    68. (async () => {
    69. let c = await connect(mysql_config.options)
    70. let r = await read(c, mysql_config.sql)
    71. await createIndex(config)
    72. await save(config, r)
    73. c.end()
    74. })()

    config/elastchsearch_config.js

    1. module.exports = {
    2. url:'http://10.7.128.15:9200',
    3. index_name:'index',
    4. entity_name:'testdata'
    5. }
  • 相关阅读:
    Java的Lambda表达式学习笔记:如何在lambda表达式中引用方法
    10分钟教你写一个数据库
    防火墙命令补充和dmz_远程管理
    Vue3 toRaw 和 markRaw
    代码随想录day2
    代码随想录算法训练营第五十八天 | 583. 两个字符串的删除操作、72. 编辑距离
    深度解析Java虚拟机(JVM)的垃圾回收机制
    NCP1256ESN65T1G具有多种保护功能 一款低功率离线电流模式PWM控制器
    CD147单克隆抗体通过酰胺反应偶联到Dox-CMCh-BAPE聚合物胶束/CBZ-AAN-Dox的制备
    python打包成可执行文件app(Mac版)
  • 原文地址:https://blog.csdn.net/LetsStudy/article/details/126833010