NodeJS开发经验总结

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()

想要查看更多文章,敬请关注 dravenxiaokai 的

你可能感兴趣的:(NodeJS开发经验总结)