Commit ad75b565 authored by nano's avatar nano

error handing

parent c3f4ecc2
...@@ -2,13 +2,9 @@ ...@@ -2,13 +2,9 @@
<project version="4"> <project version="4">
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="f0cbce64-0ebc-4f60-8c2d-2fe9e214a8c0" name="Default" comment=""> <list default="true" id="f0cbce64-0ebc-4f60-8c2d-2fe9e214a8c0" name="Default" comment="">
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/src/routes/package.ts" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/config.ts" afterPath="$PROJECT_DIR$/config.ts" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/package/main.ts" afterPath="$PROJECT_DIR$/package/main.ts" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/package/main.ts" afterPath="$PROJECT_DIR$/package/main.ts" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/server.ts" afterPath="$PROJECT_DIR$/server.ts" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/package.ts" afterPath="$PROJECT_DIR$/src/routes/package.ts" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/models/Package.ts" afterPath="$PROJECT_DIR$/src/models/Package.ts" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/app.ts" afterPath="$PROJECT_DIR$/src/routes/app.ts" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/upload.ts" afterPath="$PROJECT_DIR$/src/routes/upload.ts" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/upload.ts" afterPath="$PROJECT_DIR$/src/routes/upload.ts" />
</list> </list>
<ignored path="mycard-console-backend.iws" /> <ignored path="mycard-console-backend.iws" />
...@@ -35,8 +31,8 @@ ...@@ -35,8 +31,8 @@
<file leaf-file-name="app.ts" pinned="false" current-in-tab="false"> <file leaf-file-name="app.ts" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/routes/app.ts"> <entry file="file://$PROJECT_DIR$/src/routes/app.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="259"> <state relative-caret-position="302">
<caret line="26" column="0" lean-forward="false" selection-start-line="26" selection-start-column="0" selection-end-line="26" selection-end-column="0" /> <caret line="44" column="0" lean-forward="false" selection-start-line="44" selection-start-column="0" selection-end-line="44" selection-end-column="0" />
<folding> <folding>
<element signature="e#39#73#0" expanded="true" /> <element signature="e#39#73#0" expanded="true" />
</folding> </folding>
...@@ -44,45 +40,11 @@ ...@@ -44,45 +40,11 @@
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="utils.ts" pinned="false" current-in-tab="false"> <file leaf-file-name="upload.ts" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/package/utils.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="761">
<caret line="53" column="38" lean-forward="false" selection-start-line="53" selection-start-column="38" selection-end-line="53" selection-end-column="38" />
<folding>
<element signature="e#0#38#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Package.ts" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/models/Package.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-590">
<caret line="21" column="15" lean-forward="true" selection-start-line="21" selection-start-column="15" selection-end-line="21" selection-end-column="15" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="package.ts" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/routes/package.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-110">
<caret line="16" column="2" lean-forward="true" selection-start-line="16" selection-start-column="2" selection-end-line="16" selection-end-column="2" />
<folding>
<element signature="e#39#73#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="upload.ts" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/routes/upload.ts"> <entry file="file://$PROJECT_DIR$/src/routes/upload.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="310"> <state relative-caret-position="611">
<caret line="93" column="48" lean-forward="true" selection-start-line="93" selection-start-column="48" selection-end-line="93" selection-end-column="48" /> <caret line="114" column="8" lean-forward="false" selection-start-line="114" selection-start-column="8" selection-end-line="114" selection-end-column="8" />
<folding> <folding>
<element signature="e#0#28#0" expanded="true" /> <element signature="e#0#28#0" expanded="true" />
</folding> </folding>
...@@ -90,18 +52,6 @@ ...@@ -90,18 +52,6 @@
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="main.ts" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/package/main.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-824">
<caret line="12" column="22" lean-forward="false" selection-start-line="12" selection-start-column="22" selection-end-line="12" selection-end-column="22" />
<folding>
<element signature="e#0#25#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
</leaf> </leaf>
</component> </component>
<component name="FileTemplateManagerImpl"> <component name="FileTemplateManagerImpl">
...@@ -130,6 +80,8 @@ ...@@ -130,6 +80,8 @@
<find>ondown</find> <find>ondown</find>
<find>onDownloadStart</find> <find>onDownloadStart</find>
<find>object</find> <find>object</find>
<find>update</find>
<find>!</find>
</findStrings> </findStrings>
</component> </component>
<component name="Git.Settings"> <component name="Git.Settings">
...@@ -153,7 +105,6 @@ ...@@ -153,7 +105,6 @@
<option value="$PROJECT_DIR$/src/models/Iridium.ts" /> <option value="$PROJECT_DIR$/src/models/Iridium.ts" />
<option value="$PROJECT_DIR$/src/utils.ts" /> <option value="$PROJECT_DIR$/src/utils.ts" />
<option value="$PROJECT_DIR$/bin/run" /> <option value="$PROJECT_DIR$/bin/run" />
<option value="$PROJECT_DIR$/package/utils.ts" />
<option value="$PROJECT_DIR$/src/models/App.ts" /> <option value="$PROJECT_DIR$/src/models/App.ts" />
<option value="$PROJECT_DIR$/.env" /> <option value="$PROJECT_DIR$/.env" />
<option value="$PROJECT_DIR$/src/routes/config.ts" /> <option value="$PROJECT_DIR$/src/routes/config.ts" />
...@@ -161,10 +112,11 @@ ...@@ -161,10 +112,11 @@
<option value="$PROJECT_DIR$/server.ts" /> <option value="$PROJECT_DIR$/server.ts" />
<option value="$PROJECT_DIR$/src/routes/app.ts" /> <option value="$PROJECT_DIR$/src/routes/app.ts" />
<option value="$PROJECT_DIR$/config.ts" /> <option value="$PROJECT_DIR$/config.ts" />
<option value="$PROJECT_DIR$/package/main.ts" />
<option value="$PROJECT_DIR$/src/routes/upload.ts" />
<option value="$PROJECT_DIR$/src/models/Package.ts" /> <option value="$PROJECT_DIR$/src/models/Package.ts" />
<option value="$PROJECT_DIR$/src/routes/package.ts" /> <option value="$PROJECT_DIR$/src/routes/package.ts" />
<option value="$PROJECT_DIR$/package/utils.ts" />
<option value="$PROJECT_DIR$/package/main.ts" />
<option value="$PROJECT_DIR$/src/routes/upload.ts" />
</list> </list>
</option> </option>
</component> </component>
...@@ -185,7 +137,7 @@ ...@@ -185,7 +137,7 @@
</component> </component>
<component name="ProjectFrameBounds"> <component name="ProjectFrameBounds">
<option name="x" value="149" /> <option name="x" value="149" />
<option name="y" value="350" /> <option name="y" value="71" />
<option name="width" value="1492" /> <option name="width" value="1492" />
<option name="height" value="968" /> <option name="height" value="968" />
</component> </component>
...@@ -220,6 +172,24 @@ ...@@ -220,6 +172,24 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
</PATH> </PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="moecube-console" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="moecube-console" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="test" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="upload" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH> <PATH>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="moecube-console" /> <option name="myItemId" value="moecube-console" />
...@@ -447,12 +417,12 @@ ...@@ -447,12 +417,12 @@
<workItem from="1492397500450" duration="9337000" /> <workItem from="1492397500450" duration="9337000" />
<workItem from="1492407479780" duration="11530000" /> <workItem from="1492407479780" duration="11530000" />
<workItem from="1492482951965" duration="50292000" /> <workItem from="1492482951965" duration="50292000" />
<workItem from="1492655792313" duration="5818000" /> <workItem from="1492655792313" duration="9095000" />
</task> </task>
<servers /> <servers />
</component> </component>
<component name="TimeTrackingManager"> <component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="88712000" /> <option name="totallyTimeSpent" value="91989000" />
</component> </component>
<component name="TodoView"> <component name="TodoView">
<todo-panel id="selected-file"> <todo-panel id="selected-file">
...@@ -464,7 +434,7 @@ ...@@ -464,7 +434,7 @@
</todo-panel> </todo-panel>
</component> </component>
<component name="ToolWindowManager"> <component name="ToolWindowManager">
<frame x="149" y="350" width="1492" height="968" extended-state="0" /> <frame x="149" y="71" width="1492" height="968" extended-state="0" />
<editor active="true" /> <editor active="true" />
<layout> <layout>
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
...@@ -803,14 +773,6 @@ ...@@ -803,14 +773,6 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/models/App.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="161">
<caret line="23" column="1" lean-forward="false" selection-start-line="23" selection-start-column="0" selection-end-line="24" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/server.ts"> <entry file="file://$PROJECT_DIR$/server.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="389"> <state relative-caret-position="389">
...@@ -846,60 +808,68 @@ ...@@ -846,60 +808,68 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/package/main.ts"> <entry file="file://$PROJECT_DIR$/src/models/App.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-824"> <state relative-caret-position="-1286">
<caret line="12" column="22" lean-forward="false" selection-start-line="12" selection-start-column="22" selection-end-line="12" selection-end-column="22" /> <caret line="23" column="1" lean-forward="false" selection-start-line="23" selection-start-column="0" selection-end-line="24" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/package.ts">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1292">
<caret line="99" column="3" lean-forward="true" selection-start-line="99" selection-start-column="3" selection-end-line="99" selection-end-column="3" />
<folding> <folding>
<element signature="e#0#25#0" expanded="true" /> <element signature="e#39#73#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/package/utils.ts"> <entry file="file://$PROJECT_DIR$/package/utils.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="761"> <state relative-caret-position="83">
<caret line="53" column="38" lean-forward="false" selection-start-line="53" selection-start-column="38" selection-end-line="53" selection-end-column="38" /> <caret line="43" column="96" lean-forward="false" selection-start-line="43" selection-start-column="92" selection-end-line="43" selection-end-column="96" />
<folding> <folding>
<element signature="e#0#38#0" expanded="true" /> <element signature="e#0#38#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/routes/app.ts"> <entry file="file://$PROJECT_DIR$/package/main.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="259"> <state relative-caret-position="283">
<caret line="26" column="0" lean-forward="false" selection-start-line="26" selection-start-column="0" selection-end-line="26" selection-end-column="0" /> <caret line="43" column="19" lean-forward="true" selection-start-line="43" selection-start-column="19" selection-end-line="43" selection-end-column="19" />
<folding> <folding>
<element signature="e#39#73#0" expanded="true" /> <element signature="e#0#25#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/models/Package.ts"> <entry file="file://$PROJECT_DIR$/src/models/Package.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-590"> <state relative-caret-position="378">
<caret line="21" column="15" lean-forward="true" selection-start-line="21" selection-start-column="15" selection-end-line="21" selection-end-column="15" /> <caret line="21" column="15" lean-forward="false" selection-start-line="21" selection-start-column="15" selection-end-line="21" selection-end-column="15" />
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/routes/upload.ts"> <entry file="file://$PROJECT_DIR$/src/routes/app.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="310"> <state relative-caret-position="302">
<caret line="93" column="48" lean-forward="true" selection-start-line="93" selection-start-column="48" selection-end-line="93" selection-end-column="48" /> <caret line="44" column="0" lean-forward="false" selection-start-line="44" selection-start-column="0" selection-end-line="44" selection-end-column="0" />
<folding> <folding>
<element signature="e#0#28#0" expanded="true" /> <element signature="e#39#73#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/src/routes/package.ts"> <entry file="file://$PROJECT_DIR$/src/routes/upload.ts">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-110"> <state relative-caret-position="611">
<caret line="16" column="2" lean-forward="true" selection-start-line="16" selection-start-column="2" selection-end-line="16" selection-end-column="2" /> <caret line="114" column="8" lean-forward="false" selection-start-line="114" selection-start-column="8" selection-end-line="114" selection-end-column="8" />
<folding> <folding>
<element signature="e#39#73#0" expanded="true" /> <element signature="e#0#28#0" expanded="true" />
</folding> </folding>
</state> </state>
</provider> </provider>
......
...@@ -43,18 +43,18 @@ export async function bundle(...args) { ...@@ -43,18 +43,18 @@ export async function bundle(...args) {
files.set(file, { files.set(file, {
path: file, path: file,
hash: file_hash, hash: file_hash,
size: (await fs.statAsync(file)).size.toString() size: (await fs.statAsync(file)).size
}) })
let sand_file = path.join(sand_path, `${file_hash}.tar.gz`) let sand_file = path.join(sand_path, `${file_hash}.tar.gz`)
await archiveSingle(sand_file, [file], package_path)
archives.set(sand_file, { archives.set(sand_file, {
path: sand_file, path: sand_file,
hash: await caculateSHA256(sand_file), hash: await caculateSHA256(sand_file),
size: (await fs.statAsync(sand_file)).size.toString() size: (await fs.statAsync(sand_file)).size
}) })
await archiveSingle(sand_file, [file], package_path)
}, },
onDir: async (files, _path, depth) => { onDir: async (files, _path, depth) => {
}, },
...@@ -68,7 +68,7 @@ export async function bundle(...args) { ...@@ -68,7 +68,7 @@ export async function bundle(...args) {
// TODO: 上传meta // TODO: 上传meta
const fullHash = await caculateSHA256(fullFile) const fullHash = await caculateSHA256(fullFile)
const fullSize = (await fs.statAsync(fullFile)).size.toString() const fullSize = (await fs.statAsync(fullFile)).size
// TODO: 增量包 // TODO: 增量包
......
...@@ -23,7 +23,7 @@ router.post('/v2/package/:id/update', async (ctx: Context, next) => { ...@@ -23,7 +23,7 @@ router.post('/v2/package/:id/update', async (ctx: Context, next) => {
let sandSize = ctx.request.body.length * request_overhead let sandSize = ctx.request.body.length * request_overhead
let pack = await mongodb.Packages.findOne({id: package_id, status: 'ready'}) let pack = await mongodb.Packages.findOne({id: package_id, status: 'uploaded'})
let {fullSize, fullPath} = pack! let {fullSize, fullPath} = pack!
...@@ -61,8 +61,6 @@ router.post('/v2/package/:id/update', async (ctx: Context, next) => { ...@@ -61,8 +61,6 @@ router.post('/v2/package/:id/update', async (ctx: Context, next) => {
}) })
router.get('/v1/packages', async (ctx: Context, next) => { router.get('/v1/packages', async (ctx: Context, next) => {
if (!ctx.request.query.appId) { if (!ctx.request.query.appId) {
ctx.throw(400, "appId must be required!") ctx.throw(400, "appId must be required!")
......
...@@ -20,6 +20,12 @@ import config from '../../config' ...@@ -20,6 +20,12 @@ import config from '../../config'
// path: path.join(__dirname, '../../test/upload') // path: path.join(__dirname, '../../test/upload')
// } // }
const checkExtension = async (file) => {
const ext = mime.extension(file.mime);
if (['zip', 'gz', 'rar', '7z'].indexOf(ext) === -1) {
throw new Error('Unsupported file type');
}
}
import Router = require('koa-router'); import Router = require('koa-router');
const ossStream = Client(new OSS({ const ossStream = Client(new OSS({
...@@ -36,10 +42,7 @@ const UploadImage = async (ctx: Context) => { ...@@ -36,10 +42,7 @@ const UploadImage = async (ctx: Context) => {
const {files} = await busboy(ctx.req); const {files} = await busboy(ctx.req);
ctx.body = await Promise.all(files.map(async file => { ctx.body = await Promise.all(files.map(async file => {
const ext = mime.extension(file.mime); await checkExtension(file)
if (['png', 'jpg', 'jpeg', 'gif', 'webp'].indexOf(ext) === -1) {
throw new Error('Unsupported image type');
}
const filename = `test/${uuid.v1()}`; const filename = `test/${uuid.v1()}`;
...@@ -86,23 +89,33 @@ export const UploadPackage = async (ctx: Context) => { ...@@ -86,23 +89,33 @@ export const UploadPackage = async (ctx: Context) => {
file.on('close', async() => { file.on('close', async() => {
pack!.status = 'uploading'
await pack!.save()
resolve(pack!)
try {
pack.status = 'uploading'
await pack.save()
resolve(pack)
// 上传完, 打包 // 上传完, 打包
const bundled = await bundle(filename) const bundled = await bundle(filename)
Object.assign(pack, bundled) Object.assign(pack, bundled)
pack!.status = 'uploaded' pack.status = 'uploaded'
await pack!.save()
await mongodb.Packages.update({id: pack.id}, {$set: { status: 'deprecated' }}, {multi: true})
await pack.save()
// 打包完,上传阿里云 // 打包完,上传阿里云
} catch (e) {
pack.status = 'failed'
await pack.save()
}
}) })
file.on('error', async (error) => { file.on('error', async (error) => {
pack!.status = 'failed' pack.status = 'failed'
await pack!.save() await pack.save()
reject(error) reject(error)
}) })
...@@ -136,6 +149,9 @@ const uploadPackageUrl = async (ctx: Context) => { ...@@ -136,6 +149,9 @@ const uploadPackageUrl = async (ctx: Context) => {
const { files } = await downloader.send('tellStatus', m.gid) const { files } = await downloader.send('tellStatus', m.gid)
const [file] = files const [file] = files
try {
await checkExtension(file)
// 打包 // 打包
const bundled = await bundle(path.basename(file.path)) const bundled = await bundle(path.basename(file.path))
...@@ -143,6 +159,11 @@ const uploadPackageUrl = async (ctx: Context) => { ...@@ -143,6 +159,11 @@ const uploadPackageUrl = async (ctx: Context) => {
pack.files = bundled.files pack.files = bundled.files
pack.status = 'uploaded' pack.status = 'uploaded'
await pack.save() await pack.save()
} catch (e) {
pack.status = 'failed'
await pack.save()
}
} }
downloader.onDownloadError = async(err) => { downloader.onDownloadError = async(err) => {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment