dont use synchronous filesystem functions in workers
This commit is contained in:
parent
f54f6fb1b0
commit
a03af7ca0f
17
scripts/existsSync.js
Normal file
17
scripts/existsSync.js
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import path from 'path'
|
||||||
|
import Promise from 'bluebird'
|
||||||
|
import fs from 'fs'
|
||||||
|
|
||||||
|
const access = Promise.promisify(fs.access)
|
||||||
|
|
||||||
|
async function exists (fpath) {
|
||||||
|
try {
|
||||||
|
await access(path.resolve(fpath))
|
||||||
|
} catch (e) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = exists
|
@ -61,7 +61,7 @@ async function imageBase64 (baseObj) {
|
|||||||
let fpath = path.join(images, imageName)
|
let fpath = path.join(images, imageName)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
fs.writeFileSync(fpath, imgData.data)
|
await fs.writeFileAsync(fpath, imgData.data)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e)
|
console.error(e)
|
||||||
return null
|
return null
|
||||||
|
@ -2,6 +2,7 @@ import path from 'path'
|
|||||||
import cprog from 'child_process'
|
import cprog from 'child_process'
|
||||||
import config from '../../scripts/load-config'
|
import config from '../../scripts/load-config'
|
||||||
import http from '../../scripts/http'
|
import http from '../../scripts/http'
|
||||||
|
import exists from '../../scripts/existsSync'
|
||||||
import models from './models'
|
import models from './models'
|
||||||
import crypto from 'crypto'
|
import crypto from 'crypto'
|
||||||
import notp from 'notp'
|
import notp from 'notp'
|
||||||
@ -185,14 +186,14 @@ const API = {
|
|||||||
let uploadsDir = path.join(__dirname, '../../', 'usercontent', 'images')
|
let uploadsDir = path.join(__dirname, '../../', 'usercontent', 'images')
|
||||||
let pathOf = path.join(uploadsDir, fileName)
|
let pathOf = path.join(uploadsDir, fileName)
|
||||||
|
|
||||||
if (!fs.existsSync(pathOf)) {
|
if (!await exists(pathOf)) {
|
||||||
return {error: 'No such file'}
|
return {error: 'No such file'}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete previous upload
|
// Delete previous upload
|
||||||
if (user.avatar_file != null) {
|
if (user.avatar_file != null) {
|
||||||
let file = path.join(uploadsDir, user.avatar_file)
|
let file = path.join(uploadsDir, user.avatar_file)
|
||||||
if (fs.existsSync(file)) {
|
if (await exists(file)) {
|
||||||
await fs.unlinkAsync(file)
|
await fs.unlinkAsync(file)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -206,7 +207,7 @@ const API = {
|
|||||||
if (!user.avatar_file) return {}
|
if (!user.avatar_file) return {}
|
||||||
|
|
||||||
let file = path.join(uploadsDir, user.avatar_file)
|
let file = path.join(uploadsDir, user.avatar_file)
|
||||||
if (fs.existsSync(file)) {
|
if (await exists(file)) {
|
||||||
await fs.unlinkAsync(file)
|
await fs.unlinkAsync(file)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ import path from 'path'
|
|||||||
import express from 'express'
|
import express from 'express'
|
||||||
import RateLimit from 'express-rate-limit'
|
import RateLimit from 'express-rate-limit'
|
||||||
import config from '../../scripts/load-config'
|
import config from '../../scripts/load-config'
|
||||||
|
import exists from '../../scripts/existsSync'
|
||||||
import wrap from '../../scripts/asyncRoute'
|
import wrap from '../../scripts/asyncRoute'
|
||||||
import http from '../../scripts/http'
|
import http from '../../scripts/http'
|
||||||
import API from '../api'
|
import API from '../api'
|
||||||
@ -629,9 +630,9 @@ router.post('/user/manage/email', accountLimiter, wrap(async (req, res, next) =>
|
|||||||
|
|
||||||
// Serve a document form the documents directory, cache it.
|
// Serve a document form the documents directory, cache it.
|
||||||
const docsDir = path.join(__dirname, '../../documents')
|
const docsDir = path.join(__dirname, '../../documents')
|
||||||
router.get('/docs/:name', (req, res, next) => {
|
router.get('/docs/:name', wrap(async (req, res, next) => {
|
||||||
let doc = path.join(docsDir, req.params.name + '.html')
|
let doc = path.join(docsDir, req.params.name + '.html')
|
||||||
if (!fs.existsSync(docsDir) || !fs.existsSync(doc)) {
|
if (!await exists(docsDir) || !await exists(doc)) {
|
||||||
return next()
|
return next()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -643,7 +644,7 @@ router.get('/docs/:name', (req, res, next) => {
|
|||||||
|
|
||||||
res.header('Cache-Control', 'max-age=' + 7 * 24 * 60 * 60 * 1000) // 1 week
|
res.header('Cache-Control', 'max-age=' + 7 * 24 * 60 * 60 * 1000) // 1 week
|
||||||
res.render('document', {doc: doc})
|
res.render('document', {doc: doc})
|
||||||
})
|
}))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
========
|
========
|
||||||
|
Reference in New Issue
Block a user