2015-10-06 18 views
6

Di seguito è riportato il mio server express. Sto cercando di fare una richiesta get in ajax, ma si è rivelata fallita anche se ho richiesto jquery all'inizio. Ha detto che $ non è definito a parte l'uso di jquery ajax, cos'altro posso usare per creare un URL API RESTful di una chiamata API?Come fare una richiesta get/post ajax nel server express?

var express = require('express'); 
 
var requestHandler = require('./requestHandler'); 
 
var app = express(); 
 
var path = require('path'); 
 

 

 
app.use(express.static(path.join(__dirname, '../client'))); 
 
app.get('/homepage', requestHandler.getData); 
 

 
var port = process.env.PORT || 3000; 
 
app.listen(port); 
 
console.log("Server running at: http://localhost:" + port); 
 

 
// request handler file: 
 

 
var express = require('express'); 
 
var url = "http://jsonplaceholder.typicode.com/"; 
 

 
module.exports.getData = function (req, res){ 
 
    $.ajax({ 
 
     method: 'GET', 
 
     url: url+'posts', 
 
     success: function(data) { 
 
     console.log(data); 
 
     res.send(data); 
 
     } 
 
    }); 
 
    } 
 
module.exports.getComments = function(userId){ 
 
    $.ajax({ 
 
     method: 'GET', 
 
     url: url+'/comments', 
 
     success: function(data) { 
 
     console.log(data); 
 
     } 
 
    }); 
 
}

+0

possibile duplicato http://stackoverflow.com/questions/19074727/how-can-i-make-ajax-requests-using-the-express-framework –

+1

No. Questa non è la risposta Sto cercando – Someone

risposta

6

HTTP GET Request in Node.js Express

var http = require('http'); 
 
var options = { 
 
    host: 'www.google.com', 
 
    path: '/index.html' 
 
}; 
 

 
var req = http.get(options, function(res) { 
 
    console.log('STATUS: ' + res.statusCode); 
 
    console.log('HEADERS: ' + JSON.stringify(res.headers)); 
 

 
    // Buffer the body entirely for processing as a whole. 
 
    var bodyChunks = []; 
 
    res.on('data', function(chunk) { 
 
    // You can process streamed parts here... 
 
    bodyChunks.push(chunk); 
 
    }).on('end', function() { 
 
    var body = Buffer.concat(bodyChunks); 
 
    console.log('BODY: ' + body); 
 
    // ...and/or process the entire body here. 
 
    }) 
 
}); 
 

 
req.on('error', function(e) { 
 
    console.log('ERROR: ' + e.message); 
 
});

+0

Salve, ho risolto uno dei miei problemi con la richiesta di ottenere; tuttavia, non ho idee sul motivo per cui non ottengo i dati con richiesta da questo link http://jsonplaceholder.typicode.com/comments, funziona per/post in http.get(), ma non funziona per i commenti e funziona anche se lo faccio su client view in jquery ajax ...:/puoi spiegare per favore? – Someone

+0

Ci potrebbero essere diversi motivi, CORS, intestazioni errate ... A quale server stai postando? È il tuo host locale?Sarà necessario controllare la risposta per vedere se il server sta rispondendo con un errore. – Enkode

+0

Sì. È il mio localhost e non so perché mi dà la risposta 404:/ – Someone

0

Aggiornamento @Someone, il quadro Express è molto popolare per installare un web server nel nodo. È possibile utilizzare diversi motori di rendering per eseguire il rendering della vista e trasmettere le informazioni all'utente. Questo è un esempio molto semplice dal sito Web Express che ascolta due URL (/ post e/commenti).

var express = require('express'); 
var app = express(); 

app.get('/posts', function (req, res) { 
    res.send('Render posts!'); 
}); 

app.get('/comments', function (req, res) { 
    res.send('Render comments'); 
}); 

var server = app.listen(3000, function() { 
    var host = server.address().address; 
    var port = server.address().port; 

    console.log('Example app listening at http://%s:%s', host, port); 
}); 
+0

quindi se voglio fare una richiesta da un URL reale, che tipo di sintassi posso usare in espresso? – Someone

+0

Nel nodo di solito si utilizza il modulo http o richiesta. Vedi il mio aggiornamento. – Evers

+0

@Evers quindi qual è l'utente url deve digitare nel browser per ottenere risposta da ciò come suggerito. A mio parere, il percorso suggerisce quale operazione deve fare se si ha "/ home", che restituisce la vista home con l'uso di un motore di visualizzazione. – Jai

1

è necessario capire le cose come:

  1. expressjs è il codice lato server in modo che non è possibile utilizzare jQuery Ajax in quel modo.
  2. jQuery.ajax() può essere utilizzato solo quando si carica la pagina nel browser.

è necessario utilizzare alcuni motori vista come jade per creare modelli e utilizzare i router per spingere la vista nel browser. Quando hai la tua vista nel browser, puoi fare un riferimento al file di script che può contenere il tuo codice Ajax per permetterti di avere post e commenti.

More information.

0

provare qualcosa di simile:

function() { 


    // Simple POST request example (passing data) : 
    $http.post("/createProject/"+ id +"", { 
     projectTitle: pTitle, 
     userID  : id 
    }). 
    success(function(data, status, headers, config) { 
     // this callback will be called asynchronously 
     // when the response is available 
     $scope.getProjects(); 
     console.log("project created"); 
     console.log("this is the response data " + data); 
    }). 
    error(function(data, status, headers, config) { 
     // called asynchronously if an error occurs 
     // or server returns response with an error status. 
    }); 
}; 

Inoltre si prega di notare. lo chiamerai da un file JavaScript esterno. Sul server express si avranno solo "percorsi" e da file javascript esterni è possibile eseguire chiamate HTTP su tali percorsi.

Problemi correlati