Node.js 节点服务器方法未启动

Node.js 节点服务器方法未启动,node.js,mongodb,http,Node.js,Mongodb,Http,我创建了以下web服务 router.post('/register', (req, res) => { const user = req.body; // registerSchema.validate(user, registerSchema, (err, result) => { // if (err) // res.status(500).end(err.message); // }); findUserByEmail(user.emai

我创建了以下web服务

router.post('/register', (req, res) => {  
const user = req.body;   

// registerSchema.validate(user, registerSchema, (err, result) => {
//     if (err)
//         res.status(500).end(err.message);
// });

findUserByEmail(user.email, (err, userFeedback) => {
    console.log('Fired.');
    if (userFeedback)
        res.status(500).end(JSON.stringify("User already exists"));
});

const passwordPromise = util.promisify(bcrypt.hashSync);
const pass = bcrypt.hashSync(user.password);

createUser(user.name, user.email, pass, [], (err) => {
    if (err)
        res.status(418).end(JSON.stringify("Failed to create user."));
});

res.status(200).end(JSON.stringify("Signup successful."));
});
我们正在使用它来注册用户。下面是我们在web服务的这一部分中调用的方法

function createUser (userName, userEmail, userPass, dev, cb) {
var mg = require('mongodb').MongoClient;
mg.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, function(err, db){
    var dbo = db.db(myDB);
    var user = { name: userName, 
                 email: userEmail,
                 password: userPass,
                 devices: dev };

    var insert = util.promisify(dbo.collection("Users").insertOne);

    dbo.collection("Users").insertOne(user, function(err, res) {
        if (err) throw err;
        console.log(`${user.name} has been added.`);
        db.close();
        sendEmail(userEmail, 
                  'The CRUST Company welcomes you!',
                  'Thank you for signing up for our services!' );
    });
});
}

 //See if a user exists
function findUserByEmail (userEmail) {
var mg = require('mongodb').MongoClient;
mg.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, 
function(err, db){
    var dbo = db.db(myDB);
    var query = { email : userEmail };

    var find = util.promisify(dbo.collection("Users").find);
    return dbo.collection("Users").find(query).toArray(function(err, result) {
        if (err) throw err;
        db.close();
    });
});
}

createUser似乎工作正常,但FindUserByMail根本没有启动。我们甚至在方法中尝试了console.log,但没有得到响应。有没有关于为什么这种方法可能无法使用的想法?Thx

您的调用代码将传递一个回调函数:

findUserByEmail(user.email, (err, userFeedback) => {
    console.log('Fired.');
    if (userFeedback)
        res.status(500).end(JSON.stringify("User already exists"));
});
但是,该函数的实际实现不接受回调,因此永远不会调用它,当然,传递的回调永远不会被调用


此外,还存在多个异步设计问题。您将异步操作视为阻塞。事实并非如此。您必须在回调函数中继续代码流,而不是在
finduserbymail()
中正确执行的函数调用之后,但在调用它的请求处理程序中不正确执行



另外,
createUser()
将回调声明为参数,但从不调用它,因此传递给
createUser()
的回调也永远不会被调用。

什么是“未触发”意思?到底发生了什么?你观察到了什么?您是否记录了所有可能的错误?对于
.find()
操作的回调中的
结果
值,您似乎没有执行任何操作。我的意思是该方法根本没有执行什么方法根本没有执行?过来。具体说明代码的具体功能。它到底执行哪一行?您首先在哪里注意到问题?我们自己无法调试,所以如果你需要我们的帮助,你必须成为我们的眼睛,告诉我们到底发生了什么,这样我们才能开发出理论来解释为什么。这个问题包含的信息太少,我们无法帮助您。它可能会开始累积反对票,并因信息不足而关闭。由于您可能是新来的,stackoverflow需要彻底而清晰的问题,否则问题会被关闭。此外,请在问题中适当缩进您的代码以使其可读。我告诉过您,根本没有执行FindUserByMail函数。非常感谢。这是我第一次使用javascript,所以我不确定它的imp和元素。祝你愉快day@SteveRogers-如果这回答了您的问题,这里的惯例是您可以通过单击答案左侧的复选标记向社区的其他人表明这一点。这也将为你赢得一些声誉点,最终可以在网站上获得额外的特权。