Windows 下安装 nvm
下载地址:nvm-windows
下载成功后,以管理员身份运行,只需要填写修改两个路径:
1. nvm 安装路径 C:\myprogram\nvm
2. nodejs 默认添加环境变量 C:\myprogram\nodejs
//如果nvm install的时候npm安装不上,这一步可以去掉,
//在nvm安装目录下的settings.txt中删除,最近发现有这样的问题,
//本来以为是C盘权限的问题,后来发现不是,去掉这两行配置就可以了(2018年9月21日09:37:44更新)
//设置成国内镜像
nvm node_mirror https://npm.taobao.org/mirrors/node/
//如果npm也设成国内镜像
nvm npm_mirror https://npm.taobao.org/mirrors/npm/
//也可以手动修改配置文件
//nvm安装目录下 settings.txt
root: C:\myprogram\nvm
arch: 64
proxy: none
node_mirror: https://npm.taobao.org/mirrors/node/
npm_mirror: https://npm.taobao.org/mirrors/npm/
NodeJS 最帅安装姿势(windows)
//具体配置步骤
1. 安装 nvm
安装路径:C:\myprogram\nvm
默认添加系统环境变量:C:\myprogram\nodejs
2. 设置 nvm 国内镜像
nvm node_mirror https://npm.taobao.org/mirrors/node/
3. 查看当前已安装的 node 版本(初始为空)
nvm list (或者 nvm ls)
4. 查看远程可以安装的 node 版本
nvm ls available
5. 安装你说需要的 node 版本
nvm install 6.11.4
6. 查看已安装的 node 版本
nvm ls
7. 安装成功后,C:\myprogram\ 下自动生成了一个 nodejs 文件夹
C:\myprogram\nodejs
8. 使用指定 node 版本
nvm use 6.11.4
9. 验证安装成功
node -v
10. 配置 npm 模块的全局路径
(已废弃)a. 在 C:\myprogram\nodejs\node_modules 目录下新建:
a. 在 C:\myprogram\ 目录下新建:
node_modules\node_global 和 node_modules\node_cache 两个文件夹
b. DOS窗口执行:
npm config set prefix "C:\myprogram\nodejs\node_modules\node_global"(已废弃)
npm config set prefix "C:\myprogram\node_modules\node_global"
npm config set cache "C:\myprogram\nodejs\node_modules\node_cache"(已废弃)
npm config set cache "C:\myprogram\node_modules\node_cache"
如果上述不能设置或者说出错了,说明你之前有装过node,.npmrc里面有值,而那个路径又不在了,
可以删除 prefix 和 cache 对应的值,再执行命令
也可以直接找到.npmrc文件手动添加下面两行:
prefix=C:\myprogram\nodejs\node_modules\node_global(已废弃)
prefix=C:\myprogram\node_modules\node_global
cache=C:\myprogram\nodejs\node_modules\node_cache(已废弃)
cache=C:\myprogram\node_modules\node_cache
一般.npmrc文件在用户主目录下 C:\Users\Administrator
11. 添加 npm 全局路径到环境变量中
之前安装完 nvm 后,自动写入了 NVM_HOME 和 NVM_SYMLINK两个变量。
NVM_HOME 是 nvm 的安装目录,
NVM_SYMLINK 是默认添加的 nodejs 的安装目录。
Path里面已经追有%NVM_HOME%;%NVM_SYMLINK%;的值了。
编辑系统变量 Path,在后面追加:
%NVM_SYMLINK%\node_modules\node_global(已废弃)
C:\myprogram\node_modules\node_global
12. 重新安装全局 npm
npm install npm -g --registry=https://registry.npm.taobao.org
13. 安装 cnpm(天朝的小伙伴们都懂得哈)
npm install cnpm -g --registry=https://registry.npm.taobao.org
14. 如果不想安装 cnpm 也可以,给 npm 配置淘宝的 registry 镜像就好
npm config set registry https://registry.npm.taobao.org
不过这样的话,你所有的npm包都是走淘宝镜像了,
个人推荐还是分开比较好,单独安装 cnpm
网络条件允许的情况下还是使用 npm 官方的镜像比较好,
实在不行再用 cnpm 走国内镜像
15.设置回原始源
npm config set registry https://registry.npmjs.org
16.查看当前npm的源
npm config get registry
在 Ubuntu 上安装 nvm
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.5/install.sh | bash
nvm
nvm安装nodejs
nvm install v6.11.0
用nvm国内淘宝镜像快如老狗,嘿咦~!
NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node nvm install 6.11.0
别名
nvm alias default v6.11.0
当前node版本
node -v
淘宝镜像升级安装npm
npm --registry=https://registry.npm.taobao.org install -g npm
当前npm版本
npm -v
cnpm
淘宝镜像安装cnpm
npm --registry=https://registry.npm.taobao.org install -g cnpm
cnpm版本
cnpm -v
cnpm sync koa 同步一下这个模块
NPM
Node Package Manager:https://www.npmjs.com
使用 npm 账号登录
$ npm login
Username: dravenxiaokai
Password:
Email: (this IS public) [email protected]
Logged in as dravenxiaokai on https://registry.npmjs.org/.
/* 查看当前 npm 用户是谁 */
$ npm whoami
dravenxiaokai
生成package.json初始化文件
npm init
发布自己的模块
npm publish
如果当前模块已经发布过了
则需要在 package.json 中升级一下版本号
升级模块
npm update
删除发布的包
npm --force unpublish
/* 一般24小时之内可以删除 */
npm命令
生成package.json初始化文件
npm init -y
安装包模块
npm install
卸载包模块
npm uninstall
查看express有哪些版本
npm view express versions --json
启动start脚本
npm start
映射全局,调用全局命令即可运行程序
npm link
发布
npm publish
Node.js
os
// const os = require('os')
// console.log(os.hostname())
request
// const request = require('request')
// request({
// url: 'https://api.douban.com/v2/book/1220562',
// json: true
// }, (error, response, body) => {
// console.log(JSON.stringify(body, null, 2))
// })
module.exports
// const greeting = require('./src/greeting')
// greeting.hello()
events / EventEmitter
// const EventEmitter = require('events')
// class Player extends EventEmitter{}
// var player = new Player()
// player.on('play',(track)=>{
// console.log(`正在播放:《${track}》`)
// })
// player.emit('play','再见理想')
// player.emit('play','海阔天空')
fs.stat
// const fs = require('fs')
// fs.stat('index.js', (error, stats) => {
// if(error){
// console.log(error)
// }else{
// console.log(stats)
// console.log(`文件:${stats.isFile()}`)
// console.log(`目录:${stats.isDirectory()}`)
// }
// })
fs.mkdir
// const fs = require('fs')
// fs.mkdir('logs', (error) => {
// if (error) {
// console.log(error)
// } else {
// console.log('成功创建目录:logs')
// }
// })
fs.writeFile / fs.appendFile
// const fs = require('fs')
// fs.writeFile('logs/hello.log', '您好 ~ \n', (err) => {
// if(err){
// console.log(err)
// }else{
// console.log('成功写入文件')
// }
// })
// fs.appendFile('logs/hello.log', 'hello ~ \n', (err) => {
// if(err){
// console.log(err)
// }else{
// console.log('成功写入文件')
// }
// })
fs.readFile
// const fs = require('fs')
// fs.readFile('logs/hello.log', 'utf8', (err, data) => {
// if (err) {
// console.log(err)
// } else {
// console.log(data)
// }
// })
fs.readdir
// const fs = require('fs')
// fs.readdir('logs', (err, files) => {
// if (err) {
// console.log(err)
// } else {
// console.log(files)
// }
// }) // [ 'hello.log' ]
fs.rename
// const fs = require('fs')
// fs.rename('logs/hello.log','logs/greeting.log',(err)=>{
// if(err){
// console.log(err)
// }else{
// console.log('重命名成功')
// }
// })
fs.readdirSync
// const fs = require('fs')
// fs.readdirSync('logs').map((file) => {
// fs.unlink(`logs/${file}`, (err) => {
// if (err) {
// console.log(err)
// } else {
// console.log(`成功的删除了文件:${file}`)
// }
// })
// })
fs.rmdir
// fs.rmdir('logs', (err) => {
// if (err) {
// console.log(err)
// } else {
// console.log('成功的删除了目录:logs')
// }
// })
Stream
// const fs = require('fs')
// var count = 0
// var fileReadStream = fs.createReadStream('data.json')
// var fileWriteStream = fs.createWriteStream('data-1.json')
// // fileReadStream.once('data', (chunk) => {
// // console.log(chunk)
// // })
// fileReadStream.on('data', (chunk) => {
// console.log(`${++count} 接收到:${chunk.length}`)
// fileWriteStream.write(chunk)
// })
// fileReadStream.on('end', () => {
// console.log('--- 结束 ---')
// })
// fileReadStream.on('error', () => {
// console.log(error)
// })
pipe
// const fs = require('fs')
// var fileReadStream = fs.createReadStream('data.json')
// var fileWriteStream = fs.createWriteStream('data-1.json')
// fileReadStream.pipe(fileWriteStream)
gzip
// gzip压缩
// const fs = require('fs')
// const zlib = require('zlib')
// var fileReadStream = fs.createReadStream('data.json')
// var fileWriteStream = fs.createWriteStream('data.json.gz')
// fileWriteStream.on('pipe', (source) => {
// console.log(source)
// })
// fileReadStream
// .pipe(zlib.createGzip())
// .pipe(fileWriteStream)
Express
/* consolidate 整合模块 */
const consolidate = require('consolidate');
var app = express();
/* 输出什么 */
app.set('view engine','html');
/* 模板路径 */
app.set('views',path.join(__dirname, 'views'));
/* 那种模板引擎 */
app.engine('html',consolidate.ejs);
module.exports = app;
const bodyParser = require('body-parser');
/* POST请求数据 */
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
/* session */
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
app.use(cookieParser());//必须在此行下面添加
app.use(session({
secret: 'recommand 128 bytes random string', // 建议使用 128 个字符的随机字符串
cookie: { maxAge: 20 * 60 * 1000 }, //cookie生存周期20分钟
resave: true, //cookie之间的请求规则,假设每次登陆,就算会话存在也重新保存一次
saveUninitialized: true //强制保存未初始化的会话到存储器
}))
/* 静态资源 */
app.use(express.static(path.join(__dirname, 'public')));
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
/* 路由 */
var users = require('./routes/users');
//视图引擎开启
app.use('/users', users);
/* routes/user.js */
var express = require('express');
var router = express.Router();
/* GET users listing. */
// router.get('/', function(req, res, next) {
// res.send('respond with a resource');
// });
//GET请求与POST请求同时获取
router.all('/login',function(req,res){
res.render('login',{})
})
//接受POST请求
router.post('/register',function(req,res){
// res.send('注册');
})
// put 通常是改变数据库一条记录的方法
app.put('/api/products/:id/likes', (request, response) => {
Product
.findByIdAndUpdate(request.params.id, { $inc: { likes: 1 } })
.exec((error) => {
if (error) next(error);
response.json({ success: true });
});
});
module.exports = router;
import morgan from 'morgan'
app.use(morgan('dev'))
/* http */
const http = require('http')
var options = {
protocol: 'http:',
hostname: 'api.douban.com',
port: '80',
method: 'GET',
path: '/v2/movie/top250'
}
var responseDate = ''
var request = http.request(options, (res) => {
// console.log(res)
// console.log(res.statusCode)
// console.log(res.headers)
res.setEncoding('utf8')
res.on('data', (chunk) => {
// console.log(chunk)
responseDate += chunk
})
res.on('end', () => {
JSON.parse(responseDate).subjects.map((item) => {
console.log(item.title)
})
})
})
request.on('error', (error) => {
console.log(error)
})
request.end()