<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
        當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

        PostgreSQL Node.js實(shí)現(xiàn)函數(shù)計(jì)算方法示例

        來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:01:13
        文檔

        PostgreSQL Node.js實(shí)現(xiàn)函數(shù)計(jì)算方法示例

        PostgreSQL Node.js實(shí)現(xiàn)函數(shù)計(jì)算方法示例:前言 由于工作需要,設(shè)計(jì)到了阿里云的彈性計(jì)算,這里便記錄下來(lái) 技術(shù)棧 node.js postgresql nodemailer controller + services 編寫postgresql lib 不管異常還是正常都返回resolve,在resolve中處理結(jié)果,通過(guò)success字段去處理
        推薦度:
        導(dǎo)讀PostgreSQL Node.js實(shí)現(xiàn)函數(shù)計(jì)算方法示例:前言 由于工作需要,設(shè)計(jì)到了阿里云的彈性計(jì)算,這里便記錄下來(lái) 技術(shù)棧 node.js postgresql nodemailer controller + services 編寫postgresql lib 不管異常還是正常都返回resolve,在resolve中處理結(jié)果,通過(guò)success字段去處理

        編寫postgresql lib

        不管異常還是正常都返回resolve,在resolve中處理結(jié)果,通過(guò)success字段去處理

        const { Pool } = require('pg');
        const config = require('../config/default.js');
        const {
         database: {
         HOST,
         PORT,
         DATABASE,
         USERNAME,
         PASSWORD,
         },
        } = config;
        const pool = new Pool({
         port: PORT,
         host: HOST,
         user: USERNAME,
         password: PASSWORD,
         database: DATABASE,
        });
        /**
         * 
         * @param sql 接收的sql語(yǔ)句
         * @param {Array} values sql語(yǔ)句參數(shù)
         * @return { Object } { success: boolean, err || data }
         */
        const query = async function( sql = 'select NOW()', values = []) {
         return new Promise(resolve => {
         pool.connect((err, client, release) => {
         if (err) {
         return console.error('Error acquiring client', err.stack)
         }
         const params = Array.isArray(values) ? [...values] : [values];
         client.query(sql, params, (error, result) => {
         release();
         if (error) {
         console.error('Error executing query', error.stack);
         resolve({
         success: false,
         error,
         });
         }
         resolve({
         success: true,
         data: result.rows,
         });
         });
         });
         });
        }
        
        module.exports = {
         query,
        }

        config配置文件如下

        const config = {
         // 數(shù)據(jù)庫(kù)配置
         database: {
         DATABASE: 'databasename',
         USERNAME: 'root',
         PASSWORD: '123456',
         PORT: '3433',
         HOST: 'localhost',
         },
        };
        
        module.exports = config;

        Controller

        BaseController

        首先編寫一個(gè)基類,用于封裝一些通用的方法

        const pool = require('../lib/postgre'); // 導(dǎo)入封裝好的mysql庫(kù)
        const { query } = pool; // 導(dǎo)入query方法
        class BaseController {
         constructor() {
         }
         // 查詢表內(nèi)所有數(shù)據(jù)(非刪除)
         async list() {
         const sql = `select * from ${this.table}`;
         return await query(sql);
         }
         async excute(sql, vals = []) {
         // 執(zhí)行方法
         return await query(sql, vals);
         }
         // log 方法
         log({func, err}) {
         console.log(`excute function[${func}] occured error : ${err.message || err}`);
         }
        }
        
        module.exports = BaseController;

        InqueryController

        具體的業(yè)務(wù)邏輯Controller類

        const BaseController = require('./BaseController'); // 獲得基類
        // 繼承基類
        class InqueryController extends BaseController {
         constructor() {
         super();
         this.table = 'data_table'; // 賦值table
         }
         // 可以重寫基類的方法,如果有業(yè)務(wù)需要
         async list() {
         const sql = `select * from ${this.table} ORDER BY created_at DESC `;
         return await this.excute(sql);
         }
         async getUnsendCustomer(vals) {
         const sql = `select * from ${this.table} where created_at > $1 ORDER BY created_at DESC`;
         // 統(tǒng)一在基類調(diào)用sql參數(shù)
         return await this.excute(sql, vals);
         }
         
        }
        module.exports = InqueryController;

        Service

        BaseService

        統(tǒng)一封裝的方法,基類

        // 需要綁定this的方法
        const funcs = [
         'list',
        ]
        class BaseService {
         constructor() {
         this.controller = null;
         // 循環(huán)遍歷綁定this, 在koa綁定route的時(shí)可用到
         funcs.forEach(item => {
         this[item] = this[item].bind(this)
         });
         }
        
         // 查詢方法
         async list(ctx) {
         if (!ctx) {
         return await this.controller.list();
         }
         // controller返回的是一個(gè)對(duì)象,success(成功為true, 失敗為false), data(成功則有此數(shù)據(jù)), err(失敗則有此對(duì)象)
         const { success: flag, data, error } = await this.controller.list();
         if (flag) {
         // success
         ctx.body = {
         data,
         code: 200,
         }
         } else {
         // failed
         ctx.body = {
         code: 500,
         error,
         };
         }
         }
        }
        
        module.exports = BaseService

        InqueryService

        具體的業(yè)務(wù)邏輯

        // 導(dǎo)入基類
        const BaseService = require('./BaseService');
        // 導(dǎo)入對(duì)應(yīng)的controller
        const Controller = require('../controller/InqueryController');
        // 獲取MailSender Service
        const MailService = require('./MailSender');
        const Helper = require('../util/Helper');
        
        const funcs = [
         'unsendUser',
        ];
        // 生成一次controller
        const controller = new Controller();
        class InqueryService extends BaseService {
         constructor() {
         super()
         // 綁定對(duì)應(yīng)的controller
         this.controller = controller;
         funcs.forEach(item => {
         this[item] = this[item].bind(this);
         });
         }
         getMailOpts(i) {
         // you can use the data from database to combine the message
         const message = 'Hello world!';
         return return {
         message,
         // 可以從配置文件讀取或者oss
         to: 'xxxx@gmail.com',
         subject: 'Hello World',
         };
         }
         
         async unsendUser() {
         const list = await this.controller.list();
         if (list.length > 0) {
         const mailer = new MailService();
         const errorList = [];
         iterateList.forEach(async i => {
         const mailerOption = this.getMailOpts(i);
         const { success, ...rest } = await mailer.sendToAuitAdmin(mailerOption);
         if (!success) {
         errorList.push(rest);
         }
         });
         const lastestTime = iterateList[0].created_at;
         if (errorList.length === 0) {
         return {
         code: 200,
         message: 'Success',
         };
         }
         } else {
         return {
         code: 204,
         message: 'No user found',
         };
         }
         }
        }
        module.exports = new InqueryService();

        index.js

        函數(shù)計(jì)算的邏輯

        const inqueryService = require('./services/InqueryService'); 
        exports.handler = async function(event, context, callback) {
         const result = await inqueryService.unsendUser();
         callback(null, result);
        };

        總結(jié)

        聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        PostgreSQL Node.js實(shí)現(xiàn)函數(shù)計(jì)算方法示例

        PostgreSQL Node.js實(shí)現(xiàn)函數(shù)計(jì)算方法示例:前言 由于工作需要,設(shè)計(jì)到了阿里云的彈性計(jì)算,這里便記錄下來(lái) 技術(shù)棧 node.js postgresql nodemailer controller + services 編寫postgresql lib 不管異常還是正常都返回resolve,在resolve中處理結(jié)果,通過(guò)success字段去處理
        推薦度:
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 久久久久免费看成人影片| 免费无码婬片aaa直播表情| 暖暖日本免费中文字幕| 亚洲中文字幕日产乱码高清app| 一级毛片正片免费视频手机看| 国产午夜鲁丝片AV无码免费| 黄色毛片视频免费| 亚洲性日韩精品国产一区二区| 一级成人a免费视频| 国产成人精品日本亚洲网站| 免费一级不卡毛片| 亚洲精品中文字幕乱码影院| 日本免费一区二区在线观看| 亚洲色偷精品一区二区三区| 国产精品免费看香蕉| 一个人看的免费视频www在线高清动漫 | 久久久精品免费国产四虎| 亚洲av无码乱码国产精品| 最近中文字幕免费mv在线视频| 亚洲免费人成视频观看| 日本高清免费不卡视频| caoporm碰最新免费公开视频| 亚洲av无码乱码国产精品| 国产大片线上免费观看 | 中日韩亚洲人成无码网站| 四虎成人精品在永久免费| 中文无码日韩欧免费视频| 亚洲熟妇av一区| 国产成人免费福利网站| 97在线免费视频| 亚洲一线产区二线产区精华| 一区国严二区亚洲三区| 国产99视频精品免费专区| 亚洲色大成网站WWW国产| 国产aⅴ无码专区亚洲av麻豆| 在线观看www日本免费网站| 亚洲1区2区3区精华液| 亚洲av综合av一区| 日韩在线视频免费看| 一级毛片aaaaaa免费看| 18禁亚洲深夜福利人口|