📅  最后修改于: 2023-12-03 15:16:09.519000             🧑  作者: Mango
在 JavaScript 中,我们可以使用 getter 和 setter 方法来控制对象属性的读取和更改。这些方法在中间件中非常有用,可以帮助我们在对象被读取或更改时执行一些自定义逻辑。
一个 getter 方法是一个用于访问和返回对象属性值的函数,它被定义为对象属性的一部分,并按需执行。
以下是一个简单的示例,展示如何使用 getter 方法:
const person = {
firstName: 'John',
lastName: 'Doe',
get fullName() {
return `${this.firstName} ${this.lastName}`;
}
}
console.log(person.fullName); // "John Doe"
在这个示例中,我们定义了一个 person
对象,在其中定义了一个 fullName
的 getter 方法。当我们调用 person.fullName
时,getter 方法被调用,并返回了 "John Doe"。
与 getter 方法相反,setter 方法用于设置对象属性的值。setter 方法被定义为对象属性的一部分,并按需执行。
以下是一个简单的示例,展示如何使用 setter 方法:
const person = {
firstName: 'John',
lastName: 'Doe',
get fullName() {
return `${this.firstName} ${this.lastName}`;
},
set fullName(name) {
const [firstName, lastName] = name.split(' ');
this.firstName = firstName;
this.lastName = lastName;
}
}
person.fullName = 'Tom Smith';
console.log(person.firstName); // "Tom"
console.log(person.lastName); // "Smith"
在这个示例中,我们在 person
对象中定义了一个 fullName
属性,同时我们也定义了一个 fullName
的 setter 方法,它被调用,并将新的值 "Tom Smith" 分割为 "Tom" 和 "Smith",然后分别设置到 firstName
和 lastName
属性上。
在 Express 应用程序中,中间件是用于处理客户端请求和返回响应的函数。在 Express 中,我们可以使用 getter 和 setter 方法来创建自定义中间件。
以下是一个简单的示例,展示如何创建一个中间件来记录请求和响应的日志:
const express = require('express');
const app = express();
const port = 3000;
// 使用 getter 和 setter 方法来记录请求和响应的日志
app.use((req, res, next) => {
const start = Date.now();
// getter 方法
console.log(`[${start}] Incoming request from ${req.ip}`);
// setter 方法
res.on('finish', () => {
const end = Date.now();
const elapsed = end - start;
console.log(`[${end}] Request handled in ${elapsed}ms`);
});
next();
});
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(port, () => {
console.log(`Server started on port ${port}`);
});
在这个示例中,我们创建了一个 Express 应用程序,并使用 use
方法添加了一个中间件。这个中间件使用 getter 和 setter 方法来记录请求和响应的日志。当请求到达时,getter 方法被调用,并记录请求时间和客户端 IP。当响应被发送时,setter 方法被调用,并记录响应时间和处理请求所需的时间。