代码拉取完成,页面将自动刷新
'use strict'
process.chdir(__dirname)
const titbit=require('titbit')
const fs=require('fs');
try{
fs.accessSync('./images')
}catch(err){
fs.mkdirSync('./images')
}
let cert_path='/usr/local/share'
const app=new titbit({
//开启调试模式,若有错误会输出错误信息
debug:true,
cert:'${cert_path}/api.yidan.work.pem',
key:'${cert_path}/api.yidan.work.key'
})
//添加路由
app.get('/',async c=>{
c.send('ok')
})
//获取具体内容
app.get('/content/:id',async c=>{
let sqltext='SELECT*FROM content WHERE id=$1'
let r=await pqsl.query(sqltext,[c.param.id])
if(r.rowCount===0){
return c.status(404).send('content not found')
}
c.send(r.rows[0])
})
/**---------------------content路由-------------*/
//获取内容列表
app.get('/content',async c=>{
let ret =await psql.query('select * from content')
})
//创建内容
app.post('/content',async c=>{
try{
let data =JSON.parse(c.body)
let sqltext='INSERT INTO'
+'content(id,add_time,detail,title,updata_time)'
+'VAlues($1,$2,$3,$4,$5)'
//生成唯一ID
let id=c.helper.makeID()
let tm =Date.now()
let r=await psql.query(sqltext,[
id,tm,data.detail,data.title,tm
])
if(r.rowCount===0){
return c.status(500).send('failed')
}
c.send(id)
} catch(err){
c.status(400).send('it is not json data')
}
})
app.get('/upload',async c=>{
//c.reply是响应对象,可写的流,
//在HTTP/1.1中指向response,在HTTP/2中指向http2stream
await c.helper.pipe('./upload.html',c.reply)
})
app.post('/upload',async c=>{
//获取name获取文件对象
let f=c.getFile('image');
if(!f){
return c.status(400).send('image not found')
}
//根据传入的原始文件生成唯一文件名,主要使用f.filename的扩张名
let fname=c.helper.makename(f.filename)
//移动文件到指定位置
await c.moveFile(f,'./images/${fname}')
c.send(fname)
})
//返回图片数据
app.get('./image/:name',async c=>{
//c.param是一个对象,其中的key值是路由参数的名称
let imgname=c.param.name;
await c.helper.pipe('./images/${imgname}',c.reply)
})
//运行在1234端口
app.run(1234);
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。