簡體   English   中英

如何使用node.js后端服務器與前端和mongolab數據庫進行交互?

[英]How to use a node.js back-end server to interact with the front-end and a mongolab database?

我正在用一個簡單的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來源”錯誤。 如何使節點服務器與站點的其余部分在同一域中運行以避免這些錯誤?

我的代碼確實很難閱讀,我了解您要執行的操作,但是讓我首先建議一個更好的結構,以便於閱讀,理解和實現服務器的更多路由,請在此處檢查:

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 ),因為如果您打算托管使用此功能的靜態文件,則在用例中將需要此功能服務托管在其他服務器上,因此,請使用以下模塊: https : //www.npmjs.com/package/cors ,它將允許express從任何地方處理請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM