2014-03-05 52 views
0

環境:如何在ExpressJs中處理AJAX或XRH發佈請求,請求中使用JSON從前端到後端?

- >前端:jquery的那蘭德爾AJAX請求

- >後端:的NodeJS,expressjs(v.3.4.8)。

我試圖創建一個簡單的聯繫表單。

我的前端代碼:

var nome = $('#nome').val(); 
var email = $('#email').val(); 
var assunto = $('#assunto').val(); 
var mensagem = $('#mensagem').val(); 

var info = {'nome':nome, 'email':email, 'assunto':assunto, 'mensagem':mensagem}; 

$.ajax({ 
    type: "POST", 
    url: "/contact", 
    data: { info: JSON.stringify(info) } 
}).done(function(retorno){ 
    //do something important 
}); 

這項工作很好,我測試和螢火蟲一切從前端就可以了。

但我不知道如何處理表達,需要閱讀json從發佈請求。

我只需要它:

app.post('/contact', function(req, res){ 

}); 
+0

可能重複[如何獲得在快遞node.js的POST查詢?](http://stackoverflow.com/questions/5710358/how-to-get-post-query-in-express-node-js) – bredikhin

+0

但沒有什麼問題幫助,直到現在 –

+0

它看起來像@bredikhin發佈的問題應該回答這個問題。它解釋了哪些Express中間件包含在您的應用中,以及如何從請求主體中獲取JSON。你還需要什麼? – sgress454

回答

0

的問題是:

var info = {'nome':nome, 'email':email, 'assunto':assunto, 'mensagem':mensagem}; 

只要改變JSON'來 「」 和工作正常。我來自PHP和PHP在JSON上識別''和'「,但nodejs只是嚴格識別」「。

後一些編碼結果爲接觸形式的一個簡單的例子是:

在文件common.js(前端):

var nome = $('#nome').val(); 
    var email = $('#email').val(); 
    var assunto = $('#assunto').val(); 
    var mensagem = $('#mensagem').val(); 

    var info = {"nome":nome, "email":email, "assunto":assunto, "mensagem":mensagem}; 

    $.ajax({ 
     type: "POST", 
     url: "/contact", 
     data: JSON.stringify(info), 
     contentType:"application/json; charset=utf-8", 
     dataType: 'json' 
    }).done(function(retorno){ 
     //do something at the end 
    } 

在文件app.js或服務器。 JS或其他任何東西(後端):

var http = require("http") 
    , express = require('express') 
    , nodemailer = require('nodemailer') 
    , app = express(); 

app.use(express.json()); 
app.use(express.static(__dirname+'/public')); 

app.post('/contact', function(req, res){ 

    var name = req.body.nome; 
    var email = req.body.email; 
    var subject = req.body.assunto; 
    var message = req.body.mensagem; 

    var mailOpts, smtpTrans; 

    smtpTrans = nodemailer.createTransport('SMTP', { 
     service: 'Gmail', 
     auth: { 
      user: "[email protected]", 
      pass: "your.password" 
     } 
    }); 

    mailOpts = { 
     from: name + ' <' + email + '>', //grab form data from the request body object 
     to: '[email protected]', 
     subject: subject, 
     text: message 
    }; 

    smtpTrans.sendMail(mailOpts, function (error, response) { 
     //Email not sent 
     if (error) { 
      res.send(false); 
     } 
     //Yay!! Email sent 
     else { 
      res.send(true); 
     } 
    }); 

}); 

app.listen(80, '127.0.0.2'); 

從這個例子:http://blog.ragingflame.co.za/2012/6/28/simple-form-handling-with-express-and-nodemailer