Node.js使用笔记

一:版本管理

Linux系统

可以通过添加n模块(node的版本管理器),来交互式地管理Node.js版本。

1、首先,清除npm缓存:

npm cache clean -f

2、安装n模块,即Node的版本管理器:

npm install -g n

3、安装了n模块后,你可以使用它来安装最新的稳定版本:

n stable // 安装最新版本的node后,GLIBC可能也要跟着更新才行

4、也可以安装指定版本:

n [version.number]  // n v13.2

window系统

1、官方历史版本地址

二:静态文件路径

原生node无法返回静态文件路径(可能是我不知道),如果使用express框架则方便很多。

将静态资源文件所在的目录作为参数传递给 express.static 中间件就可以提供静态资源文件的访问了。例如,假设在 public 目录放置了图片、CSS 和 JavaScript 文件,你就可以:

app.use(express.static('public'));

现在,public 目录下面的文件就可以访问了。

http://localhost:3000/images/a.jpg

三:Express规划路由

app.get('/list/:listname/:id',function(req,res,next){
  var listname = req.params.listname;
  var id = req.params.id;
  res.send('This is' + listname + ':' + id);
});

http://localhost:1234/list/news/123
输出:This is news:123

http://localhost:8080/articlelist
http://localhost:8080/articlelist/management

四:关于接口token

博客的接口,前台不需要传token,后台需要传token验证身份。

可是前后台用的同一套接口,如何做到区分?

url传不同的参数,后台根据不同的参数判断。如果是前台只接收数据,然后操作数据库。如果是后台接收参数,并校验token,通过后才操作数据库。

五:设置跨域

npm install --save cors,然后在app.js文件中
var cors = require('cors');  
app.use(cors());  

  注意,这个代码一定要,写在注册路由的前面。此模块也可以,当做路由中间件,指定某一个,或者某一部分路由,拥有跨域功能。

六:莫名的找不到模块

运行的好好的,突然报报找不到模块,莫名其妙的根本就没有用到这个模块。直接删掉node-module文件夹。重装所有模块即可

七:生产运维

主线程管理工具pm2、forever

八:Node实现静态资源服务器

/**
 * author:sunquan
 *
 * 本文件实现一个静态服务器,对于文件类请求直接响应展示,对于Ajax类请求转发并响应对应数据;
 */

let http = require('http');
let url = require('url');
let util = require('util');
let fs = require('fs');
let mime = require('mime');
let path = require('path');
let axios = require('axios');
let querystring = require('querystring');

let server = http.createServer((req, res) => {
  let pathname = url.parse(req.url).pathname,
    UrlType = pathname.split('/'),    //辨别请求是不是ajax,本应用ajax请求都有aqi标记,具体使用时需要根据情况修改此处
    ProxyedUrl = pathname.replace(/\/api/, 'http://39.104.22.73:8888'),  //指向后后的url
    ext = path.parse(pathname).ext,
    mimeType = mime.getType(ext);

  if (UrlType[1] == 'api') {
    //我的前端请求接口url需要代理,url会添加api,需要将url替换并转发
    let post = '';
    req.on('data', function (chunk) {
      post += chunk;
    });

    req.on('end', function () {
      axios.post(
        pathname.replace(/\/api/, 'http://39.104.22.73:8888'),
        JSON.parse(post)
      ).then(function (response) {
        res.end(JSON.stringify(response.data));
      }).catch(function (e) {
        console.log('ajax error');
      });
    });
  } else if (UrlType[1] == '') {
    ReadAndResponse('index.html',res,mimeType);
  } else {
    ReadAndResponse(pathname.substring(1),res,mimeType);
  }
});

server.listen(67);

/**
 * 读取文件,并在服务中响应对应的文件
 * @param filePath 文件路径
 * @param response 响应对象
 * @param fileType 文件类型
 * @constructor
 */
function ReadAndResponse(filePath,response,fileType){
  fs.readFile(filePath, (err, data) => {
    if (err) {
      // 错误就返回404状态码
      response.writeHead(404, {
        'Content-Type': fileType
      })
    } else {
      // 成功读取文件
      response.writeHead(200, {
        'Content-Type': fileType
      })
      // 展示文件数据
      response.write(data);
    }
    // 注意,这个end 一定要放在读取文件的内部使用
    response.end();
  });
}

九:提示'node' 不是内部或外部命令

在系统变量框框里的path栏目 加入一行记录 C:\Program Files\nodejs(安装路径) 就行。

切记每次配置了都要重新打开cmd,不要用之前的窗口检测 node -v

猜你喜欢

转载自blog.csdn.net/sun_qqq/article/details/130189209