修改MongoDB以允许跨源请求

时间:2015-02-15 02:59:33

标签: javascript node.js mongodb http-headers cors

我对MongoDB比较新,所以我还是习惯了。

目前我正在尝试使用javascript中的以下代码从客户端将json对象发布到mongo。

var addUserButton = document.getElementById('add-user');
var userNameInput = document.getElementById('name');

addUserButton.onclick = function() {
    var newUser = new Object();
    newUser.name = userNameInput.value;
    var newUserJson = { 'name': newUser.name};
    $.post('127.0.0.1:27017/test', newUserJson);
};

当我运行此代码时,虽然我收到错误说明:

  

XMLHttpRequest无法加载%3127.0.0.1:27017 / test。交叉起源   请求仅支持协议方案...等

我读到了这个,并想知道是否将以下CORS处理程序添加到mongoDB会解决这个问题。如果它是正确的,我将如何将其添加到MongoDB?我找不到有关如何将此CORS处理程序添加到mongo

的文档
function handleCors(req, res, callback) {

    res.setHeader('Access-Control-Allow-Origin', '*')
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE,OPTIONS');
    res.setHeader('Access-Control-Allow-Headers', 'Authorization');

    // CORS OPTIONS request, simply return 200
    if (req.method == 'OPTIONS') {
        res.statusCode = 200;
        res.end();
        callback.onOptions();
        return;
    }

    callback.onContinue();
};

1 个答案:

答案 0 :(得分:3)

您的概念工作存在问题。

  1. 您的帖子方法在这里直接命中TCP协议,不应该是。
  2. 您应该根据服务器中的某些Rest API调用一些http请求。
  3. 在服务器路由时,您应该处理CORS(http请求),然后db层方法应该获取Update / Select等数据。
  4. 顺便说一句,对于服务器路由,您可以使用高级节点框架,如expressjs

    如果你想要一个完整的例子,你可能想要查看this example和 可以在Single Page Application with Angular.js, Node.js and MongoDB - phloxblog找到解释。