如何使用 AWS Elastic Beanstalk 部署 Node/Express 服务器

Posted

技术标签:

【中文标题】如何使用 AWS Elastic Beanstalk 部署 Node/Express 服务器【英文标题】:How to deploy Node/Express server with AWS Elastic Beanstalk 【发布时间】:2018-02-09 19:38:56 【问题描述】:

我正在尝试部署一个简单的服务器,该服务器从我在 Angular 2 前端的联系表单中发送电子邮件。

我正在尝试让服务器在 AWS Elastic Beanstalk 上运行,但是当我尝试上传它并让它运行时,我不断收到“严重”的健康状态错误。不过,它在我的 localhost 环境中运行良好。

我是否缺少诸如“开始”脚本之类的内容?我需要对我的端口做些什么吗?这是我的第一个节点/快递服务器,所以我可能遗漏了一些愚蠢的东西。

这是我的 server.js 文件:

var express = require('express');
var nodemailer = require('nodemailer');
var mg = require('nodemailer-mailgun-transport');
var bodyParser = require('body-parser');
var app = express();
var path = require('path');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded(extended: false));

app.all("/*", function(req, res, next)
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
  next();
);

//api key and domain for mailgun
var auth = 
  auth: 
    api_key: 'key',
    domain: 'sandbox.mailgun.org'
  


//send email from angular 2 with nodemailer here
app.post('/contact-form-submit', function(req, res) 

    var transporter = nodemailer.createTransport(mg(auth));

    var mailOptions = 
        from: 'postmaster@.mailgun.org',
        to: 'emailname@email.com',
        subject: ' Form Submission',
        text: ' Name: ' + req.body.name + ' Email: ' + req.body.email + ' Message: ' + req.body.message + ' Jobs: ' + req.body.jobs,
        html: '<p>You have a new form submission: </p><br><ul><li>Name: ' + req.body.name + '</li><li>Email: ' + req.body.email + '</li><li>Jobs: ' + req.body.jobs + '</li><li>Message: ' + req.body.message + '</li></ul>' 
    ;

    transporter.sendMail(mailOptions, function(error, info) 
        if (error) 
            console.log(error);
            res.redirect('/');
         else 
            console.log('Message sent.');
            res.redirect('/');
        
    )

);

app.listen(3000, function() 
    console.log('Express started on port 3000');
);

这是我的 package.json 文件:


  "name": "project-name-here",
  "version": "1.0.0",
  "dependencies": 
    "body-parser": "^1.17.2",
    "express": "^4.15.4",
    "nodemailer": "^4.0.1",
    "nodemailer-mailgun-transport": "^1.3.5"
  

【问题讨论】:

你知道如何捆绑 dist 和 server-dist 吗?我在任何地方都找不到说明 【参考方案1】:

需要在package.json文件中添加启动脚本配置


  "name": "project-name-here",
  "version": "1.0.0",
  "scripts": 
    "start": "node server"
  ,
  "dependencies": 
    "body-parser": "^1.17.2",
    "express": "^4.15.4",
    "nodemailer": "^4.0.1",
    "nodemailer-mailgun-transport": "^1.3.5"
  

【讨论】:

以上是关于如何使用 AWS Elastic Beanstalk 部署 Node/Express 服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何知道我是不是需要使用 AWS Elasticache 和 AWS Elastic Load Balancing?

如何使用 aws cli 在 Elastic Beanstalk 上上传和部署?

如何在 AWS Elastic Beanstalk 上强制使用 HTTPS

如何在 AWS Elastic Beanstalk 上设置 HTTPS

如何在 AWS Elastic Beanstalk 上设置 HTTPS

如何在 .ebextensions 配置中使用条件(AWS Elastic Beanstalk)