> 文章列表 > Node.js使用笔记

Node.js使用笔记

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:123http://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'),  //指向后后的urlext = 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