1、querystring模块中字符串转对象,或对象转字符串的方法
在Node.js环境中,可以使用querystring
模块来进行URL查询字符串的解析和序列化。该模块提供了parse()
和stringify()
方法来进行字符串和对象之间的转换。
- 要将查询字符串解析为对象,可以使用
parse()
方法。示例代码如下:
const querystring = require('querystring');
const str = 'foo=bar&baz=qux&quux=corge';
const obj = querystring.parse(str);
console.log(obj); // { foo: 'bar', baz: 'qux', quux: 'corge' }
- 要将对象序列化为查询字符串,可以使用
stringify()
方法。示例代码如下:
const querystring = require('querystring');
const obj = { foo: 'bar', baz: 'qux', quux: 'corge' };
const str = querystring.stringify(obj);
console.log(str); // 'foo=bar&baz=qux&quux=corge'
2、请用代码的方式获取post请求的参数
在Node.js中,可以使用http
或https
模块创建HTTP或HTTPS服务器,然后使用request
事件来处理客户端发来的请求。在处理POST请求时,请求数据通常会以数据流的形式发送到服务器。要获取POST请求的参数,我们需要监听data
事件来收集数据流,然后监听end
事件来处理完整的请求数据。
- 示例代码:
const http = require('http');
const server = http.createServer((req, res) => {
if (req.method === 'POST') {
let body = '';
req.on('data', (chunk) => {
// 监听data事件,收集请求数据
body += chunk.toString();
});
req.on('end', () => {
// 监听end事件,处理完整的请求数据
const params = new URLSearchParams(body);
console.log(params.get('foo')); // 输出POST请求中名为foo的参数的值
// 在这里进行请求数据的处理
// ...
res.end('OK'); // 发送响应数据
});
} else {
res.statusCode = 404;
res.end();
}
});
server.listen(8000, () => {
console.log('Server listening on port 8000');
});
3、简单说一下你所了解的设计模式有哪些?分别是什么含义
- 工厂模式(Factory Pattern):在创建对象时使用工厂方法,而不是直接实例化对象。这使得代码更具灵活性,因为可以随时更改所创建的对象类型,而无需修改大量代码。
- 单例模式(Singleton Pattern):确保只有一个对象被实例化,并提供全局访问点来访问该对象。
- 观察者模式(Observer Pattern):在对象之间建立一种发布/订阅的关系,使得当一个对象发生改变时,所有订阅它的对象都会得到通知并做出相应的响应。
- 装饰器模式(Decorator Pattern):通过动态地将一个对象添加到另一个对象中,来扩展一个对象的功能,而不需要使用子类化。
- 策略模式(Strategy Pattern):通过定义算法族,封装每个算法并使它们之间可以互换,来解决算法的灵活性和可复用性问题。
- 适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另一个接口,从而使原本不兼容的类可以一起工作。
- 建造者模式(Builder Pattern):通过将复杂对象的构建过程分离出来,并使用相同的构建过程来构建不同的表示,来简化对象的构建过程。
- 原型模式(Prototype Pattern):通过克隆现有对象来创建新的对象,以避免昂贵的对象创建操作。
- 外观模式(Facade Pattern):提供一个统一的接口,以便客户端可以访问子系统中的各种功能,同时使子系统的复杂性被隐藏起来。
- 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,从而使它们可以独立地变化。
- 组合模式(Composite Pattern):将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户可以像使用单个对象一样使用整个结构。
- 迭代器模式(Iterator Pattern):提供一种方法来访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。
- 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问。
- 中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互,从而使对象间的交互松耦合,增加系统的可维护性。
- 责任链模式(Chain of Responsibility Pattern):为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求。
- 访问者模式(Visitor Pattern):封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新操作。
- 备忘录模式(Memento Pattern):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后可以将该对象恢复到原先保存的状态。
- 解释器模式(Interpreter Pattern):提供了一种对语言进行解释的方法,用于解决特定问题中频繁出现的一些重复问题。
- 状态模式(State Pattern):允许对象在其内部状态改变时改变其行为,从而使对象看起来似乎修改了其类。
- 模板方法模式(Template Method Pattern):定义一个算法的骨架,将一些步骤延迟到子类中,使得子类可以不改变算法结构的情况下重新定义该算法的某些特定步骤。
- 命令模式(Command Pattern):将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。
4、link和@import的区别
<link>
可以引入CSS、JavaScript、icon等资源,而@import
只能引入CSS。<link>
标签可以放在文档的头部或者尾部,而@import
只能放在CSS文件的头部。- 当页面加载时,
<link>
标签引入的资源会同时开始加载,而@import
引入的CSS文件会等到页面全部加载完再开始加载。 <link>
标签支持media
属性,可以根据不同的媒体类型加载不同的CSS文件,而@import
不支持。
5、请解释一下同源策略的概念及其作用
同源策略(Same Origin Policy)是一种安全策略,用于限制一个源(origin)的文档或脚本如何与其他源的资源进行交互。
“源”是由协议、主机名和端口号组成的。如果两个文档具有相同的协议、主机名和端口号,则它们是同源的。例如,http://example.com和https://example.com就不是同源的,因为它们的协议不同。
同源策略的作用是防止一个网页从其他网页中获取或者操作数据,保证了用户的安全和隐私。如果没有同源策略的限制,恶意网站就可以窃取用户的个人信息,进行钓鱼攻击等。
同源策略限制了跨域请求的能力,因此要进行跨域请求,需要通过一些技术手段来实现,如JSONP、CORS等。在实际开发中,我们需要了解同源策略的限制,遵守安全规则,确保网站的安全性。