server.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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.json({ method: 'put', url: data })
  39. })
  40. })
  41. // Serve the built CSS file.
  42. app.get('/uppy.min.css', (req, res) => {
  43. res.setHeader('content-type', 'text/css')
  44. fs.createReadStream(path.join('../../dist/uppy.min.css')).pipe(res)
  45. })
  46. // Start the development server, budo.
  47. budo(path.join(__dirname, 'main.js'), {
  48. live: true,
  49. stream: process.stdout,
  50. port: PORT,
  51. middleware: app,
  52. browserify: {
  53. transform: [
  54. 'babelify',
  55. 'aliasify'
  56. ]
  57. }
  58. })