這篇文章主要介紹了PostgreSQL Node.js怎么實(shí)現(xiàn)函數(shù)計(jì)算方法,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
興海ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書(shū)合作)期待與您的合作!
1、能夠嵌入動(dòng)態(tài)文本于HTML頁(yè)面。2、對(duì)瀏覽器事件做出響應(yīng)。3、讀寫(xiě)HTML元素。4、在數(shù)據(jù)被提交到服務(wù)器之前驗(yàn)證數(shù)據(jù)。5、檢測(cè)訪客的瀏覽器信息。6、控制cookies,包括創(chuàng)建和修改等。7、基于Node.js技術(shù)進(jìn)行服務(wù)器端編程。
技術(shù)棧
node.js
postgresql
nodemailer
controller + services
編寫(xiě)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
首先編寫(xiě)一個(gè)基類(lèi),用于封裝一些通用的方法
const pool = require('../lib/postgre'); // 導(dǎo)入封裝好的MySQL庫(kù) const { query } = pool; // 導(dǎo)入query方法 class BaseController { constructor() { } // 查詢(xún)表內(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類(lèi)
const BaseController = require('./BaseController'); // 獲得基類(lèi) // 繼承基類(lèi) class InqueryController extends BaseController { constructor() { super(); this.table = 'data_table'; // 賦值table } // 可以重寫(xiě)基類(lèi)的方法,如果有業(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)一在基類(lèi)調(diào)用sql參數(shù) return await this.excute(sql, vals); } } module.exports = InqueryController;
Service
BaseService
統(tǒng)一封裝的方法,基類(lèi)
// 需要綁定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) }); } // 查詢(xún)方法 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)入基類(lèi) 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); };
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“PostgreSQL Node.js怎么實(shí)現(xiàn)函數(shù)計(jì)算方法”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
本文標(biāo)題:PostgreSQLNode.js怎么實(shí)現(xiàn)函數(shù)計(jì)算方法
路徑分享:http://muchs.cn/article32/pieopc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、網(wǎng)頁(yè)設(shè)計(jì)公司、外貿(mào)建站、服務(wù)器托管、網(wǎng)站排名、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)