【问题标题】:How to deal AJAX or XRH post request in ExpressJs, where the request use JSON from front-end to back-end?如何在 Express Js 中处理 AJAX 或 XHR 发布请求,其中请求使用 JSON 从前端到后端?
【发布时间】:2014-03-05 18:08:03
【问题描述】:

环境:

-> 前端:运行 ajax 请求的 jquery

-> 后端: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
});

这项工作很好,我在 firebug 上进行了测试,前端一切正常。

但我不知道如何处理需要从 post 请求中读取 json 的 express。

我有它:

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

});

【问题讨论】:

  • 但到目前为止,该问题没有任何帮助
  • 看起来@bredikhin 发布的问题应该回答这个问题。它解释了要在您的应用程序中包含哪些 Express 中间件,以及如何从请求正文中获取 JSON。你还需要什么?

标签: ajax json node.js express xmlhttprequest


【解决方案1】:

问题出在:

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 或 server.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: "your.user@gmail.com",
            pass: "your.password"
        }
    });

    mailOpts = {
        from: name + ' <' + email + '>', //grab form data from the request body object
        to: 'recipe.email@gmail.com',
        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

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2018-12-04
    相关资源
    最近更新 更多