使用返回值以快递方式发送到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成功的主要内容,如果未能解决你的问题,请参考以下文章