簡體   English   中英

nodejs:res.send() 可以從調用的 function 完成嗎?

[英]nodejs: can res.send() be done from a called function?

我是 Node.JS 的新手,我正在嘗試編寫一個 API,它在檢查用戶名是否已存在后將用戶數據存儲在數據庫中。 下面是我的 app.js 代碼

const http = require('http');
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const sqlHelper = require('./sqlHelper');


app.use(bodyParser.json());

app.post('/registeruser',(req,res)=>{
    const userName = req.body.username;
    const password = req.body.password;
    const firstName = req.body.firstname;
    const lastName = req.body.lastname;
    const userDetail = {
        userName,
        password,
        firstName,
        lastName
    }
    sqlHelper.addUserSQL(userDetail,res);
    res.send("User Registerd Seccesfuly");
})


const server = http.createServer(app);
server.listen(3000);

下面是我的 sqlHelper.js 代碼

const mysql = require('mysql2');

const addUserSQL = (userDetail,res) => {
    const con = mysql.createConnection({
        host:'localhost',
        user:'root',
        password:'mysqlpw',
        multipleStatements: true
    });
    con.connect(function(err){
        if(err)
            throw err
        console.log("CHECKING IF USER ALREADY EXIST");
        let sql = `USE mydatabase; SELECT * FROM usertable WHERE username=?`;
        con.query(sql,[userDetail.userName],function(err,result){
            if(err)
                throw err;
            if(result[1]!=[]){
                res.send("ERROR: USERNAME ALREADY EXISTS");
            }
        })
    })

}

module.exports={addUserSQL};

當請求的用戶名已經在我的數據庫中時,我得到以下響應用戶注冊成功而不是錯誤:USERNAME ALREADY EXISTS並且在終端中出現錯誤無法在將標題發送到客戶端后設置標題。 如何以正確的方式編寫此代碼以檢查用戶名是否已存在並發回響應?

直接回答你的問題是否定

您永遠不應該從被調用的 function 執行 res.send。

相反,您應該從 sqlhelper 代碼返回錯誤。

試試這個代碼:

app.post('/registeruser',async (req,res)=>{
    const userName = req.body.username;
    const password = req.body.password;
    const firstName = req.body.firstname;
    const lastName = req.body.lastname;
    const userDetail = {
        userName,
        password,
        firstName,
        lastName
    }
    const {err} = await sqlHelper.addUserSQL(userDetail);
    if(err) return res.status(500).send(err);
    res.send("User Registerd Seccesfuly");
})

sqlHelper 文件中的更改:

const mysql = require('mysql2/promise');

const options = {
    host:'localhost',
    user:'root',
    password:'mysqlpw',
    multipleStatements: true
};

const addUserSQL =async (userDetail) => {
    const connection = await mysql.createConnection(options);
    const query = `USE mydatabase; SELECT * FROM usertable WHERE username=?`;
    const [rows, fields] = await connection.execute(query, [userDetail.userName]);

    if(rows?.length>0){
       return {err: "ERROR: USERNAME ALREADY EXISTS" };
    }else{
      //code to create user entry in your db
    }
}

module.exports={addUserSQL};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM