簡體   English   中英

無法在 Expressjs 中獲取 /api/v1/users/register

[英]Cannot GET /api/v1/users/register in Expressjs

我是初級開發人員,嘗試使用 Typescript 種語言開發注冊功能。 基本上,翻譯這個寄存器函數:

app.post("/register", async (req, res) => {

  // Our register logic starts here
  try {
    // Get user input
    const { first_name, last_name, email, password } = req.body;

    // Validate user input
    if (!(email && password && first_name && last_name)) {
      res.status(400).send("All input is required");
    }

    // check if user already exist
    // Validate if user exist in our database
    const oldUser = await User.findOne({ email });

    if (oldUser) {
      return res.status(409).send("User Already Exist. Please Login");
    }

    //Encrypt user password
    encryptedPassword = await bcrypt.hash(password, 10);

    // Create user in our database
    const user = await User.create({
      first_name,
      last_name,
      email: email.toLowerCase(), // sanitize: convert email to lowercase
      password: encryptedPassword,
    });

    // Create token
    const token = jwt.sign(
      { user_id: user._id, email },
      process.env.TOKEN_KEY,
      {
        expiresIn: "2h",
      }
    );
    // save user token
    user.token = token;

    // return new user
    res.status(201).json(user);
  } catch (err) {
    console.log(err);
  }
  // Our register logic ends here
});

進入這個(這就是我使用 Typescript 的方式):

服務.ts

async function Register (user: UserAttributes):Promise<void>{
    await Users.find(user).then(userExist => {
        if(userExist) {
            console.log('User already exist. You may login if you want')
        } else {
            throw new Error('User not found. ¡Please register!')
        }
    });
    await bycript.hash(user.password, 10).then(() => {
        Users.create(
            user.first_name,
            user.last_name,
            user.email,
            user.password
              )
    });
    await jwt.sign(user.id, user.email, process.env.TOKEN_SECRET).then(token => {
     user.token = token;
    })

}

這是 controller:

Controller.ts

function RegisterController(req: Request, res:Response) {
    return Register(req.body).then((SuccesfulRegister)=> {
        res.status(200).send(SuccesfulRegister)
    }).catch((error) => {
        res.status(500).send("Usuario no pudo ser registrado :", error)
    })
}

我用 postman 測試了它。一個簡單的測試試圖將用戶注冊到數據庫中,這是服務器返回給我的:

在此處輸入圖像描述

如果有人可以指出我做錯了什么或給我一些更好地工作的提示; 我真的很感激。

Pd:我使用 Postgresql 和 Sequelize 創建模型,配置數據庫和遷移最常用的數據庫“Mongodb”。 如果這值得的話。

如果你想通過 Postman 發送 POST 請求,你需要從下拉列表中選擇它: 在此處輸入圖像描述

更新 25.01.2023

'await' 和 promise 鏈接 with.then/.catch 是互斥的。

Promise 通常是異步的。 function in.then(f) 在 promise 解析時被調用,而 function in.catch(f) 在拋出異常時被調用。

'await' 模擬同步調用。 使用 'await' 將暫停整個調用 function(因此它只能用於異步函數)並等待 promise 解析。 當它解決時,'await' 返回解決方案。 如果失敗,則會拋出異常。

暫無
暫無

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

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