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