休息 API。 AngularJS 快递。错误 500;

REST API. AngularJS to Express. Error 500;

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

我有以下 angular 控制器,它从我的联系表单中获取数据并将其放入 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,但有时很难把它们放在一起。

我在这里问,因为真的没有 "COMPLETE" 关于联系表格的 MEAN 堆栈教程。也许有人可以做一个。

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

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

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

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

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

对于快递应用,您需要将路线定义为

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

允许其他人post向服务器发送数据。

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

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

进一步阅读

您可以查看 express.js API how to handle the different HTTP methods. For sending data to your server with AngularJS, please have a look at the corresponding $http documentation 的文档。

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