7天学会nodejs-day1
xiaokeqi opened this issue · 0 comments
xiaokeqi commented
nodejs基础
监听443、80端口需加root权限
在linux下,运行node服务时,若要监听443和80端口,需要使用root权限,否则报错。有两种使用方法如下:
- 服务前加sudo
sudo node server.js
- 使用chmod +s使nodejs总是以root权限运行,但不太安全
$ sudo chmod +s /usr/local/bin/node
sudo chmod +s /usr/local/bin/node
模块
在编写每个模块时,都有require
、exports
、module
三个预先定义好的变量可供使用
require:用于在当前模块中加载和使用别的模块,传入一个模块名(路径),返回一个导出对象
var foo1 = require('./foo');
exports:当前模块的导出对象,用于导出模块的公有方法和属性。
exports.hello = function () {
console.log('Hello World!');
};
module:替换当前模块的导出对象,指定一个默认导出对象
module.exports = function () {
console.log('Hello World!');
};
模块默认导出对象被替换为一个函数
需要注意的是:由于exports导出对象被重写,因此只能导出被重写的默认对象。不能再导出其他属性和方法。如
module.exports = function(){
console.log('default');
}
exports.sub = function() {
console.log('sub')
}
此时通过
const sub = require('sub.js');
console.log(sub.sub) // 无任何返回,因为此时sub是function,如下
module.exports = function(){
console.log('default');
}
注意:一个模块中的JS代码仅在模块第一次被使用时执行一次,并在执行过程中初始化模块的导出对象。然后缓存起来,之后,缓存起来的导出对象被重复利用。
Counter.js文件如下:
var i = 0;
function count() {
return ++i;
}
exports.count = count;
main.js文件如下:
主模块main.js
内容如下:
var counter1 = require('./util/counter');
var counter2 = require('./util/counter');
console.log(counter1.count());
console.log(counter2.count());
console.log(counter2.count());
执行main.js
node main.js
1
2
3
可以看到,counter.js并没有因为require了两次,而初始化两次