Xử lý lỗi trong Node.js

Cách xử lý lỗi trong quá trình thực thi ứng dụng Node.js

Các lỗi trong Node.js được xử lý thông qua các ngoại lệ.

Tạo ngoại lệ

Một ngoại lệ được tạo bằng cách sử dụngthrowtừ khóa:

throw value

Ngay sau khi JavaScript thực thi dòng này, luồng chương trình bình thường bị tạm dừng và kiểm soát được giữ lại ở mức gần nhấtxử lý ngoại lệ.

Thường trong mã phía máy kháchvaluecó thể là bất kỳ giá trị JavaScript nào bao gồm một chuỗi, một số hoặc một đối tượng.

Trong Node.js, chúng tôi không ném chuỗi, chúng tôi chỉ ném các đối tượng Lỗi.

Đối tượng lỗi

Đối tượng lỗi là một đối tượng hoặc là một thể hiện của đối tượng Lỗi hoặc mở rộng lớp Lỗi, được cung cấp trongLỗi lõi mô-đun:

throw new Error('Ran out of coffee')

hoặc là

class NotEnoughCoffeeError extends Error {
  //...
}
throw new NotEnoughCoffeeError

Xử lý các trường hợp ngoại lệ

Một trình xử lý ngoại lệ là mộttry/catchtuyên bố.

Bất kỳ ngoại lệ nào được nêu ra trong các dòng mã có trongtrykhối được xử lý trongcatchkhối:

try {
  //lines of code
} catch (e) {

}

etrong ví dụ này là giá trị ngoại lệ.

Bạn có thể thêm nhiều trình xử lý, có thể mắc các loại lỗi khác nhau.

Nắm bắt các trường hợp ngoại lệ không cần thiết

Nếu một ngoại lệ không cần thiết được ném ra trong quá trình thực thi chương trình của bạn, chương trình của bạn sẽ bị treo.

Để giải quyết vấn đề này, bạn hãy lắng ngheuncaughtExceptionsự kiện trênprocessvật:

process.on('uncaughtException', (err) => {
    console.error('There was an uncaught error', err)
    process.exit(1) //mandatory (as per the Node docs)
})

Bạn không cần phải nhậpprocessmô-đun cốt lõi cho điều này, vì nó tự động được đưa vào.

Các trường hợp ngoại lệ với những lời hứa

Sử dụng các hứa hẹn, bạn có thể xâu chuỗi các hoạt động khác nhau và xử lý các lỗi ở cuối:

doSomething1()
  .then(doSomething2())
  .then(doSomething3())
  .catch(err => console.error(err))

Làm thế nào để bạn biết lỗi xảy ra ở đâu? Bạn không thực sự biết, nhưng bạn có thể xử lý lỗi trong từng chức năng mà bạn gọi (doSomethingX), và bên trong trình xử lý lỗi đưa ra một lỗi mới, điều đó sẽ gọi ra bên ngoàicatchxử lý:

const doSomething1 = () => {
  //...
  try {
    //...
  } catch (err) {
    //... handle it locally
    throw new Error(err.message)
  }
  //...
}

Để có thể xử lý các lỗi cục bộ mà không cần xử lý chúng trong hàm mà chúng tôi gọi, chúng tôi có thể phá vỡ chuỗi, bạn có thể tạo một hàm trong mỗithen()và xử lý ngoại lệ:

doSomething1
  .then((() => {
    return doSomething2().catch(err => {
      //handle error
      throw err //break the chain!
    })
  })
  .then((() => {
    return doSomething2().catch(err => {
      //handle error
      throw err //break the chain!
    })
  })
  .catch(err => console.error(err))

Xử lý lỗi với async / await

Sử dụng async / await, bạn vẫn cần bắt lỗi và bạn thực hiện theo cách này:

async function someFunction() {
  try {
    await someOtherFunction()
  }
  catch (err) {
    console.error(err.message)
  }
}

Tải xuống miễn phí của tôiSổ tay Node.js


Các hướng dẫn nút khác: