无法在使用 CORS 和 Mandrill 的 Node Express 中找出“没有'访问控制-允许源'
Can't figure out "No 'Access-Control-Allow-Origin' header" in Node Express with CORS and Mandrill
我已经阅读了足够多的内容,知道我对这个迷失了方向。其他线程上的解决方案似乎没有帮助。
我在pages.samedomain.com 有一个页面,在我的Node站点apps.samedomain.com 调用mandrill api。使用 ORM,我能够很好地编写表路由。写入表并且页面收到确认后,它应该触发到电子邮件路由。在本地运行时,两者都可以正常工作。部署时,我得到...
XMLHttpRequest 无法加载 http://apps.samedomain.com/.../.../mail/4847775376401843。请求的资源上不存在"访问控制允许源"标头。因此,不允许访问源"http://pages.samedomain.com"。响应具有 HTTP 状态代码 502。
在我的应用程序中.js我有...
var cors = require('cors');
app.use(cors());
在我的路由文件中,我有...
module.exports = function(appRouter) {
var mandrill = require('mandrill-api/mandrill');
var mandrill_client = new mandrill.Mandrill(process.env.MANDRILL_API_KEY);
appRouter.route('/.../mail/:first_list_id').post(function(req,res){
req.models.know_me_2016
.find({list_id:req.params.first_list_id})
.run(function(err, results){
if (err) {
res.send(err);
} else {
var template_content = [{
"recipient": <stuff> ,
"content": <stuff>
}];
var message = {
<mandrill message object stuff>
};
}
mandrill_client.messages.sendTemplate({
"template_name": <template-name>,
"template_content": template_content,
"message": message}, function(result) {
console.log(result);
//I tried adding header stuff but it didn't help, maybe in wrong place? I thought CORS library was going to take care of this part?
res.header("Access-Control-Allow-Origin", "http://interactives.dallasnews.com");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
//It sends successfully when run local
res.send("Email sent 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'
});
});
});
}
我的山钻密钥设置为接受所有 IP。
任何见解将不胜感激。
初始化 cors 时,您需要将允许的源添加到白名单中:
var whitelist = [
'http://samedomain.com',
'http://apps.samedomain.com',
'http://pages.samedomain.com'
// list whatever possible domains you have
]
var globalCorsOptions = {
origin: function(origin, callback) {
callback(null, whitelist.indexOf(origin) !== -1);
}
};
var cors = require('cors');
app.use(cors(globalCorsOptions));
在这种特殊情况下,事实证明问题在于缺少更新的.env文件。我们的私有 git 会忽略 .env 文件,因此不会发布凭据。山魈无法连接。插入 Mandrill 凭据并更新 .env 遥控器后,它开始按预期工作。
相关文章:
- 图像可以从源<img src=""/>.TEXT可以在没有javascript的情况下从外部
- Chrome没有请求JS源地图,但Firefox请求
- JS下拉列表没有'不能在复制的HTML源中工作
- 有没有办法为节点js-https请求设置源端口
- Facebook订阅源对话框:帖子没有出现在朋友'尽管我得到了回复id
- Jquery 更改视频源 Src 没有预期的影响
- 反应:在没有本地服务器的情况下加载文件的跨源请求
- SSE (事件源) 在 1 小时 22 分钟后超时.有没有办法让它持久化
- 是来自浏览器或 XmlHttpRequest 的“没有'访问控制-允许源'标头”错误消息
- 旧系统的 CORS 问题 - 没有“访问控制允许源”标头
- 在某些情况下没有“访问控制-允许源”标头错误,但在其他情况下则没有
- 无法在使用 CORS 和 Mandrill 的 Node Express 中找出“没有'访问控制-允许源'
- 有没有办法在单击立即更改源的图片后使用 AJAX 上传图像
- 获取 json 没有“访问控制允许源”错误 - 电话间隙
- 流星:搜索源没有´t清除搜索
- 如何在没有页面的情况下使AJAX读回响应's源并且没有JSON
- 如何在没有access_token的情况下显示我网站上的facebook订阅源消息
- 媒体源加载失败时没有错误事件
- JS Json代码没有在视图源上输出数据
- 如何在一个网站上加载我的Javascript文件,我没有访问它的源