如何使用node.js后端服务器与前端和mongolab数据库进行交互?

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

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”错误。 如何让节点服务器与网站的其他部分在同一个域中运行,以避免这些错误?

真的很难看懂你的代码,我明白你在做什么,但是让我先build议一个更好的结构,更容易阅读,理解和实现更多的服务器路线,请点击这里查看:

 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'); }); 

还缺lessCORS支持( https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS ),因为如果您计划托pipe服务器的静态文件,则在您的用例中需要使用此function服务托pipe在不同的服务器中,因此可以使用此模块: https : //www.npmjs.com/package/cors ,它将允许快递从任何地方处理请求。