一:版本管理
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