【发布时间】:2014-08-16 09:53:45
【问题描述】:
我在尝试在我的应用程序中执行 POST 请求时遇到问题,我进行了很多搜索,但没有找到解决方案。
所以,我有一个 nodeJS 应用程序和一个网站,我正在尝试使用来自该网站的表单进行 POST 请求,但我总是以这种方式结束:
在控制台中我看到了:
Uncaught TypeError: Cannot read property 'value' of null
Post "http://name.github.io/APP-example/file.html " not allowed
就是在这行代码中:
文件.html:
<form id="add_Emails" method ="POST" action="">
<textarea rows="5" cols="50" name="email">Put the emails here...
</textarea>
<p>
<INPUT type="submit" onclick="sendInvitation()" name='sendInvitationButton' value ='Send Invitation'/>
</p>
</form>
<script src="scripts/file.js"></script>
文件.js:
function sendInvitation(){
var teammateEmail= document.getElementById("email").value;
我阅读了许多关于跨域的帖子和文档,但没有成功。 研究来源1:http://enable-cors.org/server.html 研究来源2:http://www.w3.org/TR/2013/CR-cors-20130129/#http-access-control-max-age
我现在在做什么:
我正在尝试从我的服务器的不同域发布:
发布请求:http://name.github.io/APP-example/file.html,github 存储库
POST LISTENER : "http://xxx.xxx.x.xx:9000/email , 服务器 localhost (x-> 我的 ip 地址)
所以,我在其他文件中遇到了同样的问题,但我修复了它,将这段代码放在每条路线的开头:
var express = require('express');
var sha1 = require('sha1');
var router = express.Router();
var sessionOBJ = require('./session');
var teams = {}
var teamPlayers = []
router.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header("Access-Control-Allow-Methods", "PUT, GET,POST");
next();
});
我解决了它。
现在,我遇到了同样的问题,但在这个文件中,唯一的区别是我处理 SMTP 和电子邮件,因此我发布了一封电子邮件并将电子邮件发送到我在 POST 请求中收到的这封电子邮件。
该代码在 POSTMAN 中运行良好,因此,当我使用 POSTMAN 进行测试时,它可以正常工作并且我可以发布。
我在下面添加了这段代码,而不是我展示的第一个代码,但它也不起作用:
router.all('*', function(req, res, next){
res.header("Access-Control-Allow-Origin", "*")
res.header("Access-Control-Allow-Methods", "POST, GET, OPTIONS")
res.header("Access-Control-Allow-Headers", "Origin, Content-Type, Accept")
res.header("Access-Control-Max-Age", "1728000")
next();
});
有人知道如何解决吗?
谢谢。
【问题讨论】:
-
我认为问题的出现是因为nginx does not allow POST to static content
-
静态内容怎么来的?你能更清楚一点吗?谢谢你的评论! :)
-
如果nginx的某个
location包含proxy_pass或fastcgi_pass指令,这是动态内容,否则--静态。换句话说,静态内容是 nginx 简单地从文件系统读取文件并按原样发送的情况。动态内容是当某种编程语言产生响应时。要解决这个问题,你应该确保处理http://xxx.xxx.x.xx:9000/email请求的nginx的location包含proxy_pass指令 -
这篇文章介绍了解决静态文件中 405 Nginx 状态码的 3 种方法:405 not allowed Nginx fix for POST requests
标签: node.js express nginx cross-domain nodemailer