【问题标题】:How to use a node.js back-end server to interact with the front-end and a mongolab database?如何使用 node.js 后端服务器与前端和 mongolab 数据库进行交互?
【发布时间】:2015-08-12 00:23:51
【问题描述】:

我正在用一个简单的 jquery/html/css 前端和一个 node.js 服务器后端构建一个网站。如果我的前端具有向服务器请求用户信息的功能,如下所示:

function requestUser(email, password) {
    xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", "http://localhost:8888/getUser/" + email + "/" + password, true);
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
           console.log(xmlhttp.responseText);
        }
    }
    xmlhttp.send();
}

我的节点服务器看起来像这样:

var http = require("http"),
    mongojs = require("mongojs"),
    fs = require("fs"),
    url = require("url");
    express = require("express")
var server = http.createServer(requestHandler);
server.listen(8888);
var uri = "mongodb://<dbuser>:<dbpassword>@ds036698.mongolab.com:36698/alirodatabase";
var db = mongojs(uri, ["Papers", "Users"]);
console.log("node server running back end of app");
function requestHandler(request, response) {
    //request for user is .../getUser/<username>/<password>
    var path = url.parse(request.url).pathname;
    var details = path.split('/');
    if(details.indexOf("getUser") != -1) {
        console.log("recieved request for user");
        var user = db.Users.find({"email": details[details.indexOf("getUser") + 1],
                                  "password": details[details.indexOf("getUser") + 2]});
        user = user.toArray[0];
        response.writeHead(200, {"Content-Type": "text/json"});
        response.write(JSON.stringify(user));
    }
    else {
        fs.readFile("./index.html", function(err, file) {
            if(err) {
                return 
            }
            response.writeHead(200, {"Content-Type": "text/html"});
            response.end(file, "utf-8");
        });
    }
}

为什么它不起作用?当我尝试从服务器请求时,我从 firefox 收到“混合内容”和/或“corss-origin”错误。如何让节点服务器与站点的其余部分在同一域中运行以避免这些错误?

【问题讨论】:

    标签: javascript node.js mongodb web mlab


    【解决方案1】:

    真的很难阅读你的代码,我理解你想要做什么,但让我首先建议一个更好的结构,更容易阅读,理解和为你的服务器实现更多路由,请在这里查看:

    var express = require('express'),
      cors = require('cors'),
      app = express();
    
    app.use(cors());
    
    app.get('/getUser/:user/:passwd', function(req, res, next) {
      // Perform all mongo operations here using req.params.user and req.params.passwd
      // and in the callback send a response like the object below
      res.json({
        msg: 'This is CORS-enabled for all origins!',
        user: req.params.user,
        passwd: req.params.passwd
      });
    });
    
    app.listen(8888, function() {
      console.log('CORS-enabled web server listening on port 8888');
    });
    

    还缺少 CORS 支持 (https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS),因为如果您计划托管服务静态文件,使用托管在不同服务器中的此服务,您将在用例中需要它,因此让我们使用此模块:@987654322 @ 它将允许 express 处理来自任何地方的请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 2011-06-15
      • 2016-03-11
      • 2016-02-24
      • 1970-01-01
      • 2017-11-25
      • 2011-09-26
      相关资源
      最近更新 更多