我正在使用 mandrill 和 Node.js 创建一个邮件客户端...我的节点服务器在提交邮件客户端表单时收到一个空的 POST 请求正文
Posted
技术标签:
【中文标题】我正在使用 mandrill 和 Node.js 创建一个邮件客户端...我的节点服务器在提交邮件客户端表单时收到一个空的 POST 请求正文【英文标题】:I am creating a mail client with mandrill & Node.js... My node server is getting an empty POST request body on submit of the mail client form 【发布时间】:2015-06-09 06:29:18 【问题描述】://节点js的服务器端代码
//Dependencies
var express = require('express');
var http = require('http');
var bodyParser = require('body-parser');
var path = require('path');
var fs = require('fs');
var multer = require('multer');
var mongo = require('mongoose');
var schema =require('./schema.js');
var done = false;
var cors = require('cors');
var mandrill = require('mandrill-api/mandrill');
//END OF EXTERNAL DEPENDENCIES`
var mandrill_client = new mandrill.Mandrill('Some_Mandrill_API_Tocken');
//Environment Settings For Express Js Server
var app = express();
// all environments
app.set('port', process.env.PORT || 8080);
app.set('views', path.join(__dirname, 'inner_html'));
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
app.use(require('stylus').middleware(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public')));
app.use(cors());
app.use(bodyParser.json()); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded(// to support URL-encoded bodies
extended: true
));
app.post( '/sendemail', function(req, res)
console.log(req.body);
var _name = 'Anonymous User';
var _email = req.email;
var _subject = 'Query';
var _messsage = req.message;
//implement your spam protection or checks.
var message =
"text": _messsage,
"subject": "Website Query",
"from_email": _email,
"from_name": _name,
"to": [
"email": "agniruddra.r@gmail.com",
"name": "Admin"
],
"important": false,
"track_opens": true,
"track_clicks": true,
"auto_text": true
;
mandrill_client.messages.send("message": message, function(result)
console.log(message);
console.log(result);
res.json('msg' : 'Your Mail sent to Faculty Successfully');
, function(e)
// Mandrill returns the error as an object with name and message keys
console.log('A mandrill error occurred: ' + e.name + ' - ' + e.message);
// A mandrill error occurred: Unknown_Subaccount - No subaccount exists with the id 'customer-123'
);
);
下面是我的html表单主体.....
<div id="myModal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">Email Faculty</h4>
</div>
<form class="rqust_mail" method="POST" action="/sendemail">
<div class="modal-body">
<div class="form-group">
<label for="recipient-name" class="control-label">Email:</label>
<input type="text" class="form-control" id="email" name="email">
</div>
<div class="form-group">
<label for="message-text" class="control-label">Message:</label>
<textarea class="form-control" id="message" name="message"></textarea>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
<input type="submit" class="btn btn-primary send_mail" name="Send" value="Send"/>
</div>
</form>
<script type="text/javascript">
/*$('.send_mail').click(function()
$.ajax(
type: "POST",
data: data,
contentType: "application/json",
dataType:"json",
url: "https://mywebsite.com/sendemail",
success:function(data)
console.log(JSON.stringify(data));
//$('.rqust_mail input').reset();
);
);*/
</script>
</div>
</div>
</div>
我尝试了 ajax 和普通的 html http post 请求。这两个(HTML 和 AJAX POST)请求正文都包含一个空的 json。
请建议我的代码有什么问题。
提前致谢。
【问题讨论】:
【参考方案1】:我在浏览器脚本中看不到它实际将表单数据收集到data
的任何地方。
无论如何,请尝试将 multer
https://www.npmjs.com/package/multer 与常规 POST(不是 AJAX)一起使用。
var express = require('express')
var multer = require('multer')
var app = express()
app.use(multer( dest: './uploads/'))
然后您可以在您的帖子处理程序中查看req.body
。
【讨论】:
感谢您的回复......我已经为文件上传配置了 multer。我在这里只发布了我的 node.js 服务器代码的一部分。即使使用 multer 作为中间件,也会出现同样的错误。但是 Ajax 部分可能有问题。我是阿贾克斯的新手。但是我认为正常的 HTTP POST 请求应该可以工作,而这在我的情况下没有发生。能说明原因吗??? 没有实际代码很难猜到。也许一些 app.use 在身体解析器干扰之前。我会取出任何你不需要的 app.use 并开始修剪你的代码,直到它工作为止。排除法。或者,从一个例子开始,让它工作,然后逐渐添加你的真实代码。使用您尝试演示问题的真实代码发布一个最小示例。 我还注意到你在post
处理程序中写的req.email
你的意思是req.body.email
?【参考方案2】:
使用req.body.email
代替req.email
。并使用app.use(express.bodyParser())
【讨论】:
【参考方案3】:我认为解析器存在一些编码异常......我刚刚删除了contentType: "application/json", and the code is working fine..... still dont know the reason why it is not working with normal HTTP POST....it may be the same encoding exception.....
【讨论】:
以上是关于我正在使用 mandrill 和 Node.js 创建一个邮件客户端...我的节点服务器在提交邮件客户端表单时收到一个空的 POST 请求正文的主要内容,如果未能解决你的问题,请参考以下文章
使用车把和 Mandrill-dotnet -library 在 mandrill 中的每个循环
如何使用 Parse 和 Mandrill 发送电子邮件通知?