server.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. const fs = require('fs')
  2. const path = require('path')
  3. const budo = require('budo')
  4. const router = require('router')
  5. const bodyParser = require('body-parser')
  6. const S3 = require('aws-sdk/clients/s3')
  7. /**
  8. * Environment variables:
  9. *
  10. * - DO_REGION - Your space region, eg "ams3"
  11. * - DO_ACCESS_KEY - Your access key ID
  12. * - DO_SECRET_KEY - Your secret access key
  13. * - DO_SPACE - Your space's name.
  14. */
  15. if (!process.env.DO_REGION) throw new Error('Missing Space region, please set the DO_REGION environment variable (eg. "DO_REGION=ams3")')
  16. if (!process.env.DO_ACCESS_KEY) throw new Error('Missing access key, please set the DO_ACCESS_KEY environment variable')
  17. if (!process.env.DO_SECRET_KEY) throw new Error('Missing secret key, please set the DO_SECRET_KEY environment variable')
  18. if (!process.env.DO_SPACE) throw new Error('Missing Space name, please set the DO_SPACE environment variable')
  19. // Prepare the server.
  20. const PORT = process.env.PORT || 3452
  21. const app = router()
  22. // Set up the /params endpoint that will create signed URLs for us.
  23. const s3 = new S3({
  24. endpoint: `${process.env.DO_REGION}.digitaloceanspaces.com`,
  25. accessKeyId: process.env.DO_ACCESS_KEY,
  26. secretAccessKey: process.env.DO_SECRET_KEY
  27. })
  28. app.use(bodyParser.json())
  29. app.post('/params', (req, res, next) => {
  30. const { filename, contentType } = req.body
  31. s3.getSignedUrl('putObject', {
  32. Bucket: process.env.DO_SPACE,
  33. Key: filename,
  34. ContentType: contentType,
  35. Expires: 5 * 60 * 1000 // 5 minutes
  36. }, (err, data) => {
  37. if (err) return next(err)
  38. res.setHeader('content-type', 'application/json')
  39. res.end(JSON.stringify({ method: 'put', url: data }, null, 2))
  40. })
  41. })
  42. // Serve the built CSS file.
  43. app.get('/uppy.min.css', (req, res) => {
  44. res.setHeader('content-type', 'text/css')
  45. fs.createReadStream(path.join('../../dist/uppy.min.css')).pipe(res)
  46. })
  47. // Start the development server, budo.
  48. budo(path.join(__dirname, 'main.js'), {
  49. live: true,
  50. stream: process.stdout,
  51. port: PORT,
  52. middleware: app,
  53. browserify: {
  54. transform: [
  55. 'babelify',
  56. ['aliasify', {
  57. replacements: {
  58. '^uppy/lib/(.*?)$': path.join(__dirname, '../../src/$1')
  59. }
  60. }]
  61. ]
  62. }
  63. })