node-base
两种导出方式,导入文件
* module.exports = testfun
* exports.one = testfun
* require('导入的文件路径') 1.导入核心模块是不用写路径的 2.导入我们自己写的模块必须写上路径
异步的先后顺序问题
- node把所有东西都抽像为事件,所以内部会有个事件循环,异步是有优先级别的
- 所有js代码其实都是同步的,真正异步的是函数内部的回调
- 有两个事件队列:(事件循环)
- macro-task 1.script(全部代码) 2.setInterval setTimeout 3.setImmedidate 4.I/O (发起请求,读写文件…)
- micro-task 1.process.nextTick 2.Promoise
- 代码示例
//暂时这样理解,应该不是很对
while(true) {
1.script的同步代码,也就是macro-task的同步代码
2.micro-task的代码
3.再回来macro-task的异步代码
}
- 会有观察者去监控事件该怎么执行,观察者也是有优先级别的
npm => 生产环境和开发环境引入npm包的注意: 就像测试的东西,一般都是开发环境使用,而生产环境是不使用的
常用的一些npm命令
- npm install xxx -g global全局安装
- npm install xxx@1.1.2 指定安装版本,如果不写,则安装最新的
- npm install xxx local本地安装
- npm list -g 查看所有全局安装模块
- npm uninstall express 卸载模块
- npm update express 更新模块
- npm search express 搜索模块
- npm init -y 生产一个package.json(疑问? 那每次需要的模块都要自己手动去写好在.json文件,通过npm i 下载的可不可以自动写入到.json文件)
process.nextTick(这里要写一个回调函数) 代表下一轮执行的 eg:
//这个函数会在下一次事件循环
process.nextTick(function() {
console.log(1)
});
console.log(2);
结果:2 1
Node.js进程本身的事件就由process对象来处理(响应exit事件)
* 所以这个函数无论放在多前面其实都会最后再执行
//这个回调会函数会在程序即将退出的时候执行
process.on('exit', function() {
console.log('我是exit,我是程序即将退出的时候运行的')
})
判断js代码的执行环境就是是node还是再浏览器
if (typeof(window) === 'undefined') {
console.log('node环境');
}else {
console.log('浏览器环境');
}
node里面的回调函数错误对象就是第一个参数,error
nodemon这个工具,它的作用是监听代码文件的变动,当代码改变之后,自动重启。
- 全局安装
npm install -g nodemon
- 使用nodemon来启动项目
nodemon app.js
- nodemon 无法启动
- 尝试使用cnpm去重新安装
- 启动时显示 * : 无法加载文件 C:\Users\joe\AppData\Roaming\npm\nodemon.ps1。未对文件 C:\Users\joe\AppData\Roaming\npm\nodemon.ps1 进行数字签名。无法在当前系统上运行该脚本。有关运行脚本和设置执行策略的详
- Windows默认不允许任何脚本运行,你可以使用"Set-ExecutionPolicy"cmdlet来改变的你PowerShell环境,共有4种运行权限,
- Restricted——默认的设置, 不允许任何script运行
- AllSigned——只能运行经过数字证书签名的script
- RemoteSigned——运行本地的script不需要数字签名,但是运行从网络上下载的script就必须要有数字签名
- Unrestricted——允许所有的script运行
- 所以用管理员执行
Set-ExecutionPolicy Unrestricted