1 Star 0 Fork 0

姜溪桐/study201901

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
app-old.js 4.37 KB
一键复制 编辑 原始数据 按行查看 历史
姜溪桐 提交于 2021-10-13 08:32 . --
'use strict'
process.chdir(__dirname)
const titbit = require('titbit')
const fs = require('fs')
const pg = require('pg')
const dbconfig = require('./dbconfig.js')
const wxkey = require('./wxkey.js');
const token = require('titbit-token')
let tok = new token({
// token有效期,单位是秒
expires:30,
// 必须是32位字母数字
key:'qwertyuioplkjhgfdsazxcvbnm123456',
// 必须是16位字母数字
iv:'mnbvcxzasdfghjkl'
})
// 使用HTTP/1.1的客户端
const {httpcli} = require('gohttp')
// 初始化数据库连接
let psql = new pg.Pool(dbconfig)
try{
fs.accessSync('./images')
}catch(err){
fs.mkdirSync('./images')
}
let cert_path = '/usr/local/share'
const app = new titbit({
// 开启调试模式,会输出错误信息
debug: true,
globalLog: true,
cert: `${cert_path}/wx.qasdwer.top.pem`,
key: `${cert_path}/wx.qasdwer.top.key`
})
/**------------------content 路由---------------------- */
app.get('/content',async c=>{
let sqltext = 'SELECT id,title,update_time FROM content'
let r = await psql.query(sqltext);
c.send(r.rows)
})
app.post('/content',async c =>{
try{
// c.body是提交的请求数据体
let data = JSON.parse(c.body)
let sqltext = 'INSERT INTO content'
+ ' (id, detail, title, add_time, update_time)'
+ ' VALUES($1,$2,$3,$4,$5)'
// 随机数转成16进制字符串并去掉前两位,字符串作为ID
let id = Math.random().toString(16).substring(2)
let tm = Date.now()
let r = await psql.query(sqltext,[
id, data.detail, data.title, tm, tm
])
if(r.rowCount === 0){
return c.status(500).send('failed')
}
c.send(id)
}catch(err){
console.error(err)
c.status(400).send('bad data')
}
})
app.get('/content/:id',async c=>{
let id = c.param.id
let sqltext = 'SELECT id,detail,title,update_time FROM content WHERE id=$1';
let r = await psql.query(sqltext, [id])
if(r.rowCount === 0)
return c.status(404).send('not found')
c.send(r.rows[0])
})
app.delete('/content/:id',async c=>{
let id = c.param.id
let sqltext = 'DELETE id,detail,title,update_time FROM content WHERE id=$1';
let r = await psql.query(sqltext, [id])
// if(r.rowCount === 0)
// return c.status(404).send('not found')
// c.send(r.rows[0])
c.send({
count:r.rowCount
})
// c.send(`删除${r.rows[0]}成功`);
})
/**------------------content 路由 - END---------------------- */
// c就是context
app.get('/',async c => {
c.send('ok')
})
app.get('/upload',async c => {
// c.helper是助手函数模块,其中有对stream的封装,c.reply是响应对象,http/1.1中指向response, http/2中指向stream
await c.helper.pipe('./upload.html',c.reply)
})
app.post('/upload', async c=>{
let f = c.getFile('file')
if(!f){
return c.status(400).send('file not found')
}
// 生成唯一文件名
let fname = c.helper.makeName(f.filename)
try{
await c.moveFile(f,`./images/${fname}`)
c.send(fname)
}catch(err){
c.status(500).send('failed')
}
})
// JS无需加分号,谁用谁知道,有时也得加分号,括号开头很重要
// ;(async ()=>{
// })();
// ./image/:name 动态路由
// ||
// ./image/a.jpg
// 冒号表示这个路由是带参数的路由
app.get('/image/:name',async c=>{
let imgname = c.param.name
try{
await c.helper.pipe(`./images/${imgname}`,c.reply)
}catch(err){
c.status(404).send('image not found')
}
})
app.get('/user/:name/:age/:mobile',async c=>{
console.log(c.param)
c.send(c.param)
})
app.get('mp-login/:code',async c=>{
// c.send(c.param)
let auth_url = `https://api.weixin.qq.com/sns/jscode2session`
+ `?appid=${wxkey.appid}`
+ `&secret=${wxkey.secret}`
+ `&js_code=${c.param.code}`
+ `&grant_type=authorization_code`
let ret = await httpcli.get(auth_url)
.then(res=>{
return res.json()
})
c.send(tok.make(ret));
})
// 监听1234端口运行服务
app.run(2001)
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/jxt666/study201901.git
git@gitee.com:jxt666/study201901.git
jxt666
study201901
study201901
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385