Open xiaokeqi opened 4 years ago
在linux下,运行node服务时,若要监听443和80端口,需要使用root权限,否则报错。有两种使用方法如下:
sudo node server.js
$ sudo chmod +s /usr/local/bin/node
sudo chmod +s /usr/local/bin/node
在编写每个模块时,都有require、exports、module三个预先定义好的变量可供使用
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内容如下:
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了两次,而初始化两次
nodejs基础
监听443、80端口需加root权限
在linux下,运行node服务时,若要监听443和80端口,需要使用root权限,否则报错。有两种使用方法如下:
sudo node server.js
sudo chmod +s /usr/local/bin/node
模块
在编写每个模块时,都有
require
、exports
、module
三个预先定义好的变量可供使用require:用于在当前模块中加载和使用别的模块,传入一个模块名(路径),返回一个导出对象
var foo1 = require('./foo');
exports:当前模块的导出对象,用于导出模块的公有方法和属性。
module:替换当前模块的导出对象,指定一个默认导出对象
模块默认导出对象被替换为一个函数
需要注意的是:由于exports导出对象被重写,因此只能导出被重写的默认对象。不能再导出其他属性和方法。如
此时通过
注意:一个模块中的JS代码仅在模块第一次被使用时执行一次,并在执行过程中初始化模块的导出对象。然后缓存起来,之后,缓存起来的导出对象被重复利用。
Counter.js文件如下:
main.js文件如下:
主模块
main.js
内容如下:执行main.js
可以看到,counter.js并没有因为require了两次,而初始化两次