【问题标题】:REST API. AngularJS to Express. Error 500;REST API。 AngularJS 到 Express。错误 500;
【发布时间】:2015-01-30 10:09:16
【问题描述】:

请帮我弄清楚 Express REST API 背后的逻辑。 我正在将我的自我教育从纯 AngularJS 转移到 MEAN 堆栈,所以请多多包涵。

我有以下角度控制器,它从我的联系表单中获取数据并将其放入 formData 对象。

app.controller('ContactCtrl',  ['$scope', '$http', function($scope,  $http){

  $scope.formData = {};
  $scope.submitForm = function() {
    console.log($scope.formData);
    $http.post('/sendEmail', $scope.formData);
  }

}]);

在我的 routes/index.js 文件中,我有以下代码来测试它是否至少可以到达这条路线

router.get('/sendEmail', function(req, res) {
   res.send('hello world');
});

当我提交表单时,我从服务器收到错误 500。

http://localhost:3000/sendEmail 500 (Internal Server Error)

谁能告诉我我做错了什么。

我试图为初学者找到一些有关此主题的文档或教程,但此时我认为我需要一些交互式人工帮助。谁能解释一下

  1. 为什么我收到 500 错误,为什么它不是简单地呈现“Hello World”
  2. 如何正确地将 $scope.formData 传递给 Express 以及 res.可能看起来像。

最后一个问题,是一个额外的问题,如果你认为它太多,你可以忽略它,我仍然需要深入研究 nodemailer 文档。 3. 如何使用我们传递给 Express 的这个 $scope.formData 对象,并在此处与 nodemailer API 一起使用它来实际发送电子邮件。

提前谢谢大家!

我真的很想掌握 MEAN,但有时很难将它们放在一起。

我在这里问,因为联系表单上确实没有“完整”的 MEAN 堆栈教程。也许有人可以制作一个。

【问题讨论】:

    标签: angularjs express mean-stack


    【解决方案1】:

    向服务器发送HTTP请求时,需要声明服务器要执行的动作,称为HTTP request methods

    如果你想获取资源并且不想对服务器产生任何副作用,你可以使用 'GET' 方法。在客户端,您需要在请求中添加此标头,幸运的是 Angular 已经为我们包装了所有这些,我们只需要调用$http.get()。从服务器端,您需要声明允许其他人(将访问您的服务器的任何人)访问的方法。所以在 Express 中,如果你写下面的代码,

    router.get('/sendEmail', function(req, res) {
       res.send('hello world');
    });
    

    这意味着,您允许用户从您的服务器GET目录“/sendEmail”下的资源。

    在您的情况下,您想将一些数据发送到服务器(您的快速应用程序)并可能将其存储在数据库中,您需要在您的 HEADER 中添加一个“POST”方法。您可以在 Angular 应用中轻松使用$http.post('/sendMail', data)...

    对于快递应用,你需要将路由定义为

    router.post('/send mail', ... )
    

    允许其他人将数据发布到服务器。

    【讨论】:

    • 你能进一步解释你的意思吗?
    【解决方案2】:

    如果您的客户端代码使用$http.post() 方法向后端发出POST 请求,则您的服务器必须侦听 POST 请求。您的代码使用router.get('/sendEmail') 侦听GET。因此,您必须将服务器代码更改为以下内容。

    router.post('/sendEmail', function (req, res) {
        /* your code */
    });
    

    进一步阅读

    您可以查看express.js API 的文档,了解如何处理不同的 HTTP 方法。要使用 AngularJS 将数据发送到您的服务器,请查看corresponding $http documentation

    我还建议您花一些时间阅读有关 REST 的信息,这确实意味着根据您想要实现的功能使用特定路径和方法调用服务器上的端点。一个很好的阅读是Best Practices for a Pragmatic Restful API

    【讨论】:

    • 感谢您指出正确的方向,我能够配置正确的 API 端点并将数据传递给 nodemailer。
    猜你喜欢
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-07
    • 2016-01-10
    • 1970-01-01
    • 2017-09-20
    相关资源
    最近更新 更多