javascript - 在express中使用返回值发送到ajax成功

标签 javascript jquery node.js express mongoose

我需要从包含的文件返回一个值,以便在 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 成功函数。

最佳答案

您尝试混契约(Contract)步和异步函数调用,这很难混合。代码块

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 函数调用,它的行为也是异步的。通过上面的解决方案,您也可以处理这个封装的异步调用。

关于javascript - 在express中使用返回值发送到ajax成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41592285/

相关文章:

javascript - 随着时间的推移,使用 Node.js 写入磁盘会变慢

node.js - Angular 同时从 formData 和 formGroup 发送数据

javascript - 一旦我将一个项目添加到我的数组中,我就无法从我的数组中删除一个项目

javascript - 未处理的PromiseRejection警告: ValidationError

javascript - 关于在 JavaScript 中创建微框架的建议

javascript - 如何运行 Javascript 中存储在变量中的动态生成函数

jquery - 照片网格仅显示一些图像

javascript - 如何将普通js函数注册到 Angular 中的@Output

javascript - 页面加载时向上滑动图像

javascript - 外部文件中的 ExpressJS 导出路由不适用于根路径