使用返回值以快递方式发送到ajax成功

Posted

技术标签:

【中文标题】使用返回值以快递方式发送到ajax成功【英文标题】:using return value to send to ajax success in express 【发布时间】:2017-05-26 07:51:01 【问题描述】:

我需要从包含的文件中返回一个值,以便在 express 的 ajax 成功中使用它。这是我的 app.js 代码。

var userdetail = 
    "useremail":req.body.useremail,
    "fname" : req.body.fname,
    "lname" : req.body.lname,
    "password" : randompassword

var pp = require('./routes/registration.js')(userdetail);

console.log(pp);

这是我的registration.js代码

var express = require('express');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded( extended: true )); 

var UserReg = require('./regschema.js');

module.exports = function(userdetail)

    //console.log("sdsadsa");

    UserReg.find(Email : userdetail.useremail, function (err, docs) 
        if (docs.length)
            //console.log("present");
            //return("Email Present ");
            //return 'Name exists already';
             pres = "present";
         else 
            var UserAdd = new UserReg(
                FirstName: userdetail.fname,
                LastName: userdetail.lname,
                Email: userdetail.useremail,
                Pass: userdetail.password
            );

            // Save
            UserAdd.save(function (err, fluffy) 
                if (err) return console.error(err);
            );

            pres = "absent";

            //res.send("Done");
        
        console.log(pres);
        return pres;
    );

我正在寻找的是 app.js 上的 console.log 必须显示一个存在或不存在的值,以便我可以使用该值将其发送到 ajax 成功函数。

【问题讨论】:

【参考方案1】:

您尝试混合使用难以混合的同步和异步函数调用。代码块

var pp = require('./routes/registration.js')(userdetail);
console.log(pp);

逐行同步运行。但是在您的 registration.js 文件中,您有声明

UserReg.find(Email : userdetail.useremail, function (err, docs) 

这似乎是一个异步函数,它需要一个回调函数作为第二个参数。异步函数不会立即返回结果,但有时会在将来返回。所以你需要等待结果。您也可以在主代码中使用这样的回调函数来执行此操作:

var registration = require('./routes/registration.js');
registration(userdetail, function(pp) 
    console.log(pp);
);

registration.js 文件随后会以这种方式更改以接受回调函数本身:

module.exports = function(userdetail, callback)
    UserReg.find(Email : userdetail.useremail, function (err, docs) 
        if (docs.length)
            callback('Name exists already');
         else 
            var UserAdd = new UserReg(
                FirstName: userdetail.fname,
                LastName: userdetail.lname,
                Email: userdetail.useremail,
                Pass: userdetail.password
            );
            // Save
            UserAdd.save(function (err, fluffy) 
                if (err) 
                    callback(err);
                 else 
                    callback('Done');
                
            );
        
    );

请注意UserAdd.save 函数调用,它的行为也是异步的。使用上面的解决方案,您也可以处理这个封装的异步调用。

【讨论】:

以上是关于使用返回值以快递方式发送到ajax成功的主要内容,如果未能解决你的问题,请参考以下文章

如何更新骨干模型并将其发送到快递后端

如何通过反应以快递方式向mailchimp发送发布请求

ajax对象。同步与异步及ajax发送请求

$.ajax 成功函数返回 null

现需要使用 jQuery 代码实现 ajax 请求,详细信息如下

jquery ajax 返回 文件 类型要怎么设置