5 Star 0 Fork 0

威猛的小老虎/智游问答

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
server.js 6.23 KB
一键复制 编辑 原始数据 按行查看 历史
@珍 提交于 2018-11-23 15:04 . 登录
const exp = require('express'),
bodyParser = require('body-parser'),
cookieParser = require('cookie-parser'),
fs = require('fs'),
multer = require('multer'),
app = exp()
app.use(exp.static('www'))
app.use(bodyParser.urlencoded({ extended: true }))
app.use(cookieParser())
const storage = multer.diskStorage({
destination: 'www/uploads',
filename: function (req, file, callback) {
var petname = req.cookies.petname
callback(null, `${petname}.jpg`)
}
}),
uploads = multer({ storage })
/*--------------------登录--------------------*/
app.post('/api/user/signin', (req, res) => {
var fileName = `users/${req.body.petname}.txt`
function send(code, message) {
res.status(200).json({ code, message })
}
fs.exists(fileName, exists => {
if (exists) {
fs.readFile(fileName, (err, data) => {
if (err) {
send('file error', '抱歉,系统错误...')
}
else {
var user = JSON.parse(data)
if (user.password == req.body.password) {
res.cookie('petname', req.body.petname)
// 此处需要加密
send('success', '登录成功...')
}
else {
send('signin error', '用户名或密码错误!')
}
}
})
}
else {
send('register error', '用户名未注册!')
}
})
})
/*--------------------退出--------------------*/
app.get('/api/user/signout', (req, res) => {
res.clearCookie('petname')
res.status(200).json({ code: 'success' })
})
/*--------------------提问--------------------*/
app.post('/ask', (req, res) => {
var petname = req.cookies.petname
function send(code, message) {
res.status(200).json({ code, message })
}
if (!petname) {
send('signin error', '请重新登录...')
return
}
var time = new Date()
req.body.petname = petname
req.body.ip = req.ip
req.body.time = time
function saveFile() {
var fileName = `questions/${time.getTime()}.txt`
fs.appendFile(fileName, JSON.stringify(req.body), err => {
if (err) {
send('file error', '抱歉,系统错误...')
}
else {
send('success', '问题提交成功!')
}
})
}
fs.exists('questions', exists => {
if (exists) {
saveFile()
}
else {
fs.mkdir('questions', err => {
if (err) {
send('file error', '抱歉,系统错误...')
}
else {
saveFile()
}
})
}
})
})
/*--------------------回答--------------------*/
app.post('/answer/:id', (req, res) => {
var petname = req.cookies.petname
function send(code, message) {
res.status(200).json({ code, message })
}
if (!petname) {
send('signin error', '请重新登录...')
return
}
console.log(req.body)
var filename = `questions/${req.params.id}.txt`
req.body.petname = petname
req.body.ip = req.ip
req.body.time = new Date()
fs.readFile(filename, (err, data) => {
if (err) {
send('file error', '抱歉,系统错误...')
}
else {
var question = JSON.parse(data)
// 第1次回答时,问题里没有answers这个数组,所以添加
// 以后的每一次直接向answers里push
if (!question.answers) question.answers = []
question.answers.push(req.body)
// 经过上一句的代码,文件里既有问题又有答案
fs.writeFile(filename, JSON.stringify(question), err => {
if (err) {
send('file error', '抱歉,系统错误...')
}
else {
send('success', '回答提交成功!')
}
})
}
})
})
/*--------------------头像--------------------*/
app.post('/user/photo', uploads.single('photo'), (req, res) => {
res.status(200).json({ code: 'success', message: '上传成功' })
})
/*--------------------首页--------------------*/
app.get('/index', (req, res) => {
function send(code, message, data) {
res.status(200).json({ code, message, data })
}
function readFiles(i, files, questions, complete) {
// 第1次传参:0,['123.txt','234.txt'], [], ()
if (i < files.length) {
// 在if分支里调用fs里的readFile读取文件内容
fs.readFile(`questions/${files[i]}`, (err, data) => {
if (!err) {
// 读完第1个文件内容后,questions是以下的形式
// [{...}]
// 读完第2个文件内容后,questions是以下的形式
// [{...},{...}]
questions.push(JSON.parse(data))
}
// 递归调用(自身调用自身)
readFiles(++i, files, questions, complete)
})
}
// 直到读完最后一个文件内容会执行else分支
else {
// 读完后的回调函数
// 作用是把读取的所有内容返回到浏览器端
complete()
}
}
// readdir:读取目录下的所有文件(注意:不是读文件内容)
// 读取的结果是所有文件名组成的数组
// 例如:['zhangsan.txt','lisi.txt']
fs.readdir('questions', (err, files) => {
if (err) {
send('file error', '抱歉,系统错误...')
}
else {
console.log(files)
// reverse():反转数组
// 目的:把最新的问题和答案显示在最上面
files = files.reverse()
var questions = []
// readFiles:自定义函数
readFiles(0, files, questions, () => {
send('success', '读取数据成功!', questions)
})
}
})
})
app.listen(3000, () => console.log('正在运行...'))
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/zhouhu123456/wisdom_tour_ask.git
git@gitee.com:zhouhu123456/wisdom_tour_ask.git
zhouhu123456
wisdom_tour_ask
智游问答
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385