Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AJAX post to Express不向req.query返回任何数据(是的,有相同的q,但没有任何效果)_Javascript_Ajax_Node.js_Post_Express - Fatal编程技术网

Javascript AJAX post to Express不向req.query返回任何数据(是的,有相同的q,但没有任何效果)

Javascript AJAX post to Express不向req.query返回任何数据(是的,有相同的q,但没有任何效果),javascript,ajax,node.js,post,express,Javascript,Ajax,Node.js,Post,Express,这是我的设置。但是,当我通过ajax发送数据时,主体是空的。在网络下的chrome上,我看到帖子和内容,以及正确的负载: {"EventName":"asd","PrivacyLevel":1,"TypeInt":1,"ExpectedDate":"asd","Desc":"asd","Down":0,"Up":0,"PostCode":"","Address":"","ID":""} 大多数人说它是主体解析器,我把解析器放在了应用程序之上。使用(app.router)我不知道它是否与exp

这是我的设置。但是,当我通过ajax发送数据时,主体是空的。在网络下的chrome上,我看到帖子和内容,以及正确的负载:

{"EventName":"asd","PrivacyLevel":1,"TypeInt":1,"ExpectedDate":"asd","Desc":"asd","Down":0,"Up":0,"PostCode":"","Address":"","ID":""}

大多数人说它是主体解析器,我把解析器放在了应用程序之上。使用(app.router)我不知道它是否与express.json()有冲突,但当我把它注释掉时,它没有任何区别

   app.set('port', process.env.PORT || 3000);
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'jade');
    app.use(express.favicon());
    app.use(express.logger('dev'));
    app.use(express.json());
    app.use(express.urlencoded());
    app.use(express.methodOverride());
    app.use(express.cookieParser('secret'));
    app.use(express.session({ secret: 'randomstring' }));
    app.use(express.bodyParser());
    app.use(app.router);
    app.use(express.static(path.join(__dirname, 'public')));

$.ajax({
    url: window.location.origin + '/registerEvent',
    contentType: 'application/json: charset=utf-8',
    dataType: 'json',
    type: 'POST',
    data: JSON.stringify(Event.toJSONString()),
    cache: false,
    timeout: 5000,
    async: false,
    success: function (result) {
        success = true;
    },
    error: function (jqXHR, textStatus, errorThrown) {
        console.log('error ' + textStatus + " " + errorThrown);
        success = false;
    }
});

exports.registerEvent = function (req, res) {
    if (req.session.lastPage === '/index' && req.xhr) {
        console.log(req);
        console.log(req.body);
        console.log('body: ' + JSON.stringify(req.body));

        var test = req.query.EventName;

数据将在
req.body
(从AJAX JSON解析的HTTP请求正文)而不是
req.query
(URL查询字符串)中可用


在jquery ajax代码中,使用
contentType:'application/json'
,这应该可以让它执行您想要的POST请求。

数据将在
req.body
(来自ajax json的解析HTTP请求体)中可用,而不是
req.query
(URL查询字符串)


在jQueryAjax代码中,使用
contentType:'application/json'
,这应该可以让它执行您想要的POST请求。

我认为您在Connect(Express用于解析主体的中间件)中发现了一个bug。bodyParser的代码使用正则表达式匹配“application/json”内容类型,该内容类型在附加“charset=utf-8”时失败

下面是我所说的Connect.js代码:

Connect正在使用的正则表达式是

/^application\/([\w!#\$%&\*`\-\.\^~]*\+)?json$/i
如果运行以下代码节点,您将看到带有“charset=utf-8”的节点未通过测试:

regex = /^application\/([\w!#\$%&\*`\-\.\^~]*\+)?json$/i
regex.test("application/json") // returns true
regex.test("application/json: charset=utf-8") // returns false

我认为您在Connect(Express用来解析主体的中间件)中发现了一个bug。bodyParser的代码使用正则表达式匹配“application/json”内容类型,该内容类型在附加“charset=utf-8”时失败

下面是我所说的Connect.js代码:

Connect正在使用的正则表达式是

/^application\/([\w!#\$%&\*`\-\.\^~]*\+)?json$/i
如果运行以下代码节点,您将看到带有“charset=utf-8”的节点未通过测试:

regex = /^application\/([\w!#\$%&\*`\-\.\^~]*\+)?json$/i
regex.test("application/json") // returns true
regex.test("application/json: charset=utf-8") // returns false

在我的情况下,我这样说:

res.header("Access-Control-Allow-Origin", "*");

在我的情况下,我这样说:

res.header("Access-Control-Allow-Origin", "*");

我复制了邮递员生成的代码,它对我有用

而不是使用我的普通代码

$.ajax({
  url: 'http://localhost:3001/api/v1/signup',
  data: {
    first_name: 'jacob',
    last_name: 'ross',
    username: 'username',
    emailAddress: 'email@email.com',
    password: 'somepassword'
  },
  type: 'POST',
  contentType: 'application/json: charset=utf-8', // caused CORS issue
  success: function(d){
    console.log(d);
  }
})
我从Postman那里使用了这个,它工作得很好,并且能够通过
req.query
访问参数

var settings = {
  "url": "http://localhost:3001/api/v1/signup?email=email@email.com&password=123456789&first_name=jacob&last_name=ross&username=jacobrossdev",
  "method": "POST",
  "timeout": 0,
};

$.ajax(settings).done(function (response) {
  console.log(response);
});

我复制了邮递员生成的代码,它对我有用

而不是使用我的普通代码

$.ajax({
  url: 'http://localhost:3001/api/v1/signup',
  data: {
    first_name: 'jacob',
    last_name: 'ross',
    username: 'username',
    emailAddress: 'email@email.com',
    password: 'somepassword'
  },
  type: 'POST',
  contentType: 'application/json: charset=utf-8', // caused CORS issue
  success: function(d){
    console.log(d);
  }
})
我从Postman那里使用了这个,它工作得很好,并且能够通过
req.query
访问参数

var settings = {
  "url": "http://localhost:3001/api/v1/signup?email=email@email.com&password=123456789&first_name=jacob&last_name=ross&username=jacobrossdev",
  "method": "POST",
  "timeout": 0,
};

$.ajax(settings).done(function (response) {
  console.log(response);
});

捕获此请求的快速路由是什么样子的?var ws=require('./modules/webserv');app.post('/registerEvent',ws.registerEvent)但是它可以工作,因为我可以看到console.log,但是有一个空的body,如果将bodyParser()移近顶部会发生什么?例如,在“视图引擎”的正下方,contentType:“application/json:charset=utf-8”似乎是导致问题的原因,但我不明白为什么@赫克托科里亚我很困惑。如果使用不同的内容类型,它是否有效?捕获此请求的快速路由是什么样子的?var ws=require('./modules/webserv');app.post('/registerEvent',ws.registerEvent)但是它可以工作,因为我可以看到console.log,但是有一个空的body,如果将bodyParser()移近顶部会发生什么?例如,在“视图引擎”的正下方,contentType:“application/json:charset=utf-8”似乎是导致问题的原因,但我不明白为什么@赫克托科里亚我很困惑。如果您使用不同的内容类型,它能工作吗?抱歉,错误:P在那里宣传了一个pit,但是req.body返回{}empty.contentType:'application/json:charset=utf-8'似乎是导致问题的原因,但我不明白为什么。在您的jquery ajax代码中,使用
contentType:'application/json'
这应该可以让它执行您想要的POST请求。抱歉,错误:P在那里得到了一个坑,但是req.body返回{}空。contentType:'application/json:charset=utf-8'似乎是导致问题的原因,但我不明白为什么。在您的jquery ajax代码中,使用
contentType:'application/json'
,这应该可以让它完成您想要的POST请求。稍后会做并让您知道,似乎是承诺稍后会做并让您知道,似乎是有希望的