NodeJs——(4)和模块

(15)模块

当我们制作一个模块时(具体制作方法见前面),我们可能会写一个构造函数(因为在浏览器写构造函数时我们经常会这么做)。

 

如代码:

function sayHello() {
    this.say = function () {
        console.log('hello');
    }
}
exports.Hello = sayHello;

在这里,我们有一个构造函数sayHello,函数里有一个方法say,输出hello。

 

然后导出的是sayHello这个构造函数。我们在另外一个文件中调用它。

 

代码这么写:

var hello = require('./test').Hello;    //调用刚才写的那个模块
var m = new hello();
m.say();

 

第一行表示我们调用刚才写的那个模块。

注意,这个时候和之前不同(之前是直接require模块即可),这里需要添加一个Hello。原因在于require表示导入的是一个整体(即有多个exports导出的方法),这里我们只需要其中的Hello方法(即对应原模块中的sayHello这个构造函数);

 

当然,也可以写为require('./test'),在下面的代码,把hello改为hello.Hello即可。

 

第二行代码表示生成一个这个构造函数的实例(还记得js里如何调用构造函数么?构造函数是不能直接调用其方法的);

 

第三行代码表示调用这个实例的say方法(即模块中的this.say=的那个函数);

 

这个流程是:

请求模块——》生成函数的实例——》调用函数的方法

 

 

我们也可以在导出的时候,用另一种方法:

module.exports = sayHello;

 

然后调用这个模块

var hello = require('./test');    //调用刚才导入的那个文件
m = new hello();
m.say();

 

这个时候hello就是这个函数,然后生成一个实例,调用其方法。

 

但我觉得有个潜在问题,这个模块里只能有这一个函数(不是很确定)。我验证结果如下:

修改之前的模块:

function sayHello() {
    this.say = function () {
        console.log('hello');
    }
}
function say() {
    console.log("say");
}
module.exports = sayHello;
exports.say = say;

调用其的模块:

var hello = require('./test');    //调用刚才导入的那个文件
console.log(hello.say)


显示是undefined,而正常情况下(删除module.exports = sayHello;这一行)应该显示:



经过查询,这种用法的作用在于,假如我们只想将一个对象封装到模块中,就这么用。

 

 

另外,不可以直接对exports进行赋值以替代(module.exports这种用法)。

按照说明,这个变量会在模块执行结束后被释放,但module.exports不会。

 


在Node.js中使用axios请求接口以及拦截器的使用方法如下: 首先,需要安装axios模块: ``` npm install axios ``` 然后,在代码中引入axios模块: ```js const axios = require('axios'); ``` 接下来,可以使用axios发送GET、POST等请求: ```js axios.get('http://example.com/api') .then(response => { console.log(response.data); }) .catch(error => { console.log(error); }); axios.post('http://example.com/api', {data: 'hello'}) .then(response => { console.log(response.data); }) .catch(error => { console.log(error); }); ``` 当然,axios还支持一些其他的请求方法,比如PUT、DELETE等。 接下来,我们可以使用axios的拦截器对请求和响应进行处理。例如,我们可以在请求头中添加token: ```js axios.interceptors.request.use(config => { const token = localStorage.getItem('token'); if (token) { config.headers.Authorization = `Bearer ${token}`; } return config; }, error => { return Promise.reject(error); }); ``` 在上面的代码中,我们使用了axios的interceptors.request.use方法,它可以在请求被发送出去之前对其进行拦截处理。在这个例子中,我们将localStorage中存储的token添加到请求头中的Authorization字段中。 我们还可以使用axios的interceptors.response.use方法对响应进行处理。例如,我们可以检查响应状态码是否为401,如果是,则跳转到登录页面: ```js axios.interceptors.response.use(response => { return response; }, error => { if (error.response.status === 401) { window.location.href = '/login'; } return Promise.reject(error); }); ``` 在上面的代码中,我们使用了axios的interceptors.response.use方法,它可以在响应被接收之前对其进行拦截处理。在这个例子中,我们检查了响应状态码是否为401,并且在这种情况下跳转到登录页面。 以上就是在Node.js中使用axios请求接口及拦截器的使用方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值