Javascript 对node.js服务器路由的AJAX post调用-提供跨源请求错误

Javascript 对node.js服务器路由的AJAX post调用-提供跨源请求错误,javascript,ajax,node.js,xmlhttprequest,Javascript,Ajax,Node.js,Xmlhttprequest,我是node.js新手,尝试使用我的基本API并在路由文件中调用正确的router.get函数 我有一个用于ajax帖子的基本客户端javascript: console.log("main.js loaded"); var form = document.getElementById('addUserForm'); form.addEventListener("submit", function(event){ event.preventDefault(); var username

我是node.js新手,尝试使用我的基本API并在路由文件中调用正确的router.get函数

我有一个用于ajax帖子的基本客户端javascript:

console.log("main.js loaded");

var form = document.getElementById('addUserForm');
form.addEventListener("submit", function(event){
  event.preventDefault();
  var username = document.getElementById('username').value;
  var fd = new FormData();
  fd.append('username', username);

  window.ajaxCall.call("POST", "localhost:3000/api/users/add", fd, function(responseText){
    // var response = JSON.parse(responseText);
    console.log(response);
  });
});
在这个客户端javascript中,我使用了一个定制的xmlhttprequest库——我将在整个问题下面提供代码(可能存在节点js的错误)

**更新**当我将ajax调用url更改为:/api/users/add或出现以下错误时:
POSThttp://localhost:3000/api/users/add 404(未找到)

这是我的路线文件:

var express = require('express');
var router = express.Router();


/* GET home page. */
router.get('/users', function(req, res) {
    var Users = require('../models/users'); // inkludiert das Users model
    var data; // undefined data variable

    Users.getData(function(err, result) { // ruft die getData Funktion vom Users Model auf
        // TODO: Error handling.
        data = result;
        render(data); // ruft die render Funktion auf und übergibt das Resultobjekt
    });

    function render(data){
      res.send(data);
    }
});

router.get('/api/users/add', function(req, res){
    console.log(req,res);
});

module.exports = router;
我所要做的就是调用
router.get('api/users/add')…
函数,以便继续使用我的api

现在,当我尝试使用客户端javascript ajax调用执行此操作时,会出现以下错误:

XMLHttpRequest cannot load localhost:3000/api/users/add. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.
当我检查错误时,它显示错误发生在js文件中的window.ajax调用以及库中的回调函数中

以下是必要的库代码:

window.ajaxCall = {
  call: function(RequestType, pathToFile, data, cb){
    var ajax = null;
    if(window.XMLHttpRequest){ //Google Chrome, Mozilla Firefox, Opera, Safari,...
        ajax = new XMLHttpRequest();
    }else if(window.ActiveXObject){ // Internet Explorer
        try{
            ajax = new ActiveXObject("Msxml2.XMLHTTP.6.0");
        } catch(e){
            try{
                ajax = new ActiveXObject("Msxml2.XMLHTTP.3.0");
            }
            catch(e){}
        }
    }
    if(ajax!=null){
      ajax.open(RequestType, pathToFile, true);
      typeof data == "string" || typeof data == "array" ? ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded") : "" ;
      ajax.onreadystatechange = function() {
        if (ajax.readyState == 4) {
          if(this.status == 200){
            cb(ajax.responseText);
          }
        }
      }
      ajax.send(data);
    }
  },
  abort: function(){
    ajax.abort();
  }
}

将协议添加到ajax调用中

window.ajaxCall.call("POST", "http://localhost:3000/api/users/add", fd, function(responseText){
    // var response = JSON.parse(responseText);
    console.log(response);
});
现在,对于404部分,您的路由需要get,但您正在发送post,请按如下所示更改路由器:

router.post('/api/users/add', function(req, res){
    console.log(req,res);
});

协议、域和端口是相同的吗?如中所示,网站是否也在端口3000上的本地主机上运行?您似乎缺少协议
http://localhost
?是的,两者都在:3000上。我不明白的是,如果我从localhost:3000/api/users/add-to更改我的ajax调用,我会在404(未找到)后出现以下错误我已经更新了我的问题您好,谢谢您的输入。当我更改ajax调用url时,我已经用结果更新了我的问题。好吧,您现在得到的404是另一个错误,它似乎意味着现在您的请求正在到达您的服务器,但服务器无法解析路由。是的,我知道,但不应该是router.get('/api/users/add',捕获该url上的请求?不,不应该,请检查我的编辑。路由器正在等待get,而您正在发送post。噢,糟了-我正在ajax中使用post并侦听get。不幸的是,在将其更改为您的代码后,我仍然得到相同的404。。。