【问题标题】:Node Promise - Create Validation节点承诺 - 创建验证
【发布时间】:2021-01-12 02:35:45
【问题描述】:

我正在尝试编写一些我自己的验证。我有一个控制器,它将在另一个文件中调用其中的几个函数。我有姓名和电子邮件等信息。

我很难理解如何返回干净的物品或错误消息。我想对此使用 promise 或 async-await,但我遇到了错误。

应该是这样的

----- 验证文件

module.exports.sanitizeName = (name) => {
  if(name === '' || name === null || name === undefined) {
    return new Error('Name is required and cannot be null or undefined)
  } else {
    let cleanedName = name.toLowerCase();

    return cleanedName;
  }

----- 控制器

const create = async (req, res) => {

  let name = req.body.name;
  let sanitizedName = sanitizeName(name);

  // It's here that I'll need to check for an error object or the cleaned name.
  // Then res.status(201).json the result or res.status(500).json the error

最初我尝试了一个承诺并得到未处理的错误:


--- sanitize file
let sanitizeName = (name) => {
  return new Promise((resolve, reject) => {
  if(happy path) {
    resolve happy path (name)
  } else {
  reject(Error('Name is required and can't be null));
})

--- controller file

let sanitizedName = sanitizeName(name).then((result) => {
  // do something here with result
}).catch((error) => {
  res.status(500).json({
    error_message: error
)}

基本上我想在另一个文件中调用一些函数并让它们返回输入的干净版本或验证失败的错误消息。

我知道 express-validator 和 JOI 存在。但我尽量远离图书馆,自己编写大部分代码。

【问题讨论】:

  • 你到底在问什么?如何使用 async/await 完成这项工作?
  • 很难辨别这里的实际问题...
  • 只用try/catch?不确定是什么问题。您的控制器的代码看起来不完整。

标签: javascript node.js promise


【解决方案1】:
// Validation Class
module.exports.sanitizeName = (name) => {
  if(name === '' || name === null || name === undefined) {
    throw new Error('Name is required and cannot be null or undefined')
  } else {
    let cleanedName = name.toLowerCase();
    return cleanedName;
  }
}

// 控制器文件

const create = async (req, res) => {
    const response = {data: null, message: null, statusCode: 200}

   try {
    let name = req.body.name;
    response.data = sanitizeName(name);
    
    }catch (e) {
        response.statusCode = 500;
        response.message = e.message;
    }
    return res.status(response.statusCode).json(response); 
}

【讨论】:

    猜你喜欢
    • 2014-06-23
    • 2016-05-17
    • 2021-12-23
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 2014-03-23
    • 2018-12-09
    相关资源
    最近更新 更多