- 开启监听端口监测端口是否重复
// index.js
import express from 'express'
import { portIsOccupied } from './constant/portIsOccupied'
// 监听端口
const app = express()
portIsOccupied(5657)
.then(port => {
app.listen(port, () => {
console.log(`start http://localhost:${port}`)
})
})
// portIsOccupied.js
import net from 'net'
export const portIsOccupied = port => {
const server = net.createServer().listen(port)
return new Promise((resolve, reject) => {
server.on('listening', () => {
console.log(`the server is runnint on port ${port}`)
server.close()
resolve(port)
})
server.on('error', (err) => {
if (err.code === 'EADDRINUSE') {
console.log(`this port ${port} is occupied.try another.`)
resolve(portIsOccupied(port + 1)) //如占用端口号+1
} else {
reject(err)
}
})
})
}
- 设置允许跨域
const app = express()
// 设置允许跨域
app.all('*', function (req, res, next) {
res.header('Access-Control-Allow-Origin', '*'); //访问控制允许来源:所有
res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); //访问控制允许报头 X-Requested-With: xhr请求
res.header('Access-Control-Allow-Metheds', 'PUT, POST, GET, DELETE, OPTIONS'); //访问控制允许方法
res.header('X-Powered-By', 'nodejs'); //自定义头信息,表示服务端用nodejs
res.header('Content-Type', 'application/json;charset=utf-8');
next();
});
- 读取本地json文件并输出一个json
import fs from 'fs'
import Glob from 'glob'
import path from 'path'
import pify from 'pify' // Promisify a callback-style function
export const readJsonFiles = async app => {
const glob = pify(Glob);
let arr = (await glob(`jsonFiles/**/*.{json, js}`, {
cwd: path.resolve(__dirname, process.cwd() + '/static')
})),
jsonDate = [];
arr.forEach(element => {
let _data = fs.readFileSync(path.resolve(__dirname, process.cwd() + '/static') + `/` + element),
content = JSON.parse(_data.toString());
jsonDate.push({
id: (element + '').split('.')[0],
content: content
})
});
return jsonDate
}
nodejs中常用的路径
//获取node.exe的绝对路径
console.log(process.execPath);//D:\nodejs\node.exe
//存放当前文件(即server.js)文件夹的绝对路径
console.log(__dirname);//D:\nodeTest\node_path\lib
//当前文件(即server.js)的绝对路径
console.log(__filename);//D:\nodeTest\node_path\lib\server.js
//从所传入的文件路径(相对或绝对)中获取存放传入文件的文件夹的相对或绝对路径
//(例如 传入 public/home.html 则返回的是public)
console.log(path.dirname(__filename));//D:\nodeTest\node_path\lib
//执行当前脚本(即server.js)的位置 (例如 在根目录下执行 node ./xxx/xxx/a.js 则返回的是根目录地址 )
console.log(process.cwd());//D:\nodeTest\node_path\lib
//'a/b/c'和'../src' 组合而成的绝对路径 文件或文件夹都行
//例如 console.log(path.resolve('a/b/c', '../src'));//D:\nodeTest\node_path\lib\a\b\src
console.log(path.resolve(__dirname, '../public'));//D:\nodeTest\node_path\public
//'a/b/c'和'../src'组成的相对路径
//console.log(path.join('a/b/c', '../src'));//a\b\src
console.log(path.join(__dirname, '../public'));//D:\nodeTest\node_path\public
//相当于path.resolve(__dirname, '../public/home.html')或path.join(__dirname, '../public/home.html')
//但传入的必须是文件路径,而不是文件夹路径,而且当文件不存在时会抛出异常
console.log(require.resolve('../public/home.html'));//D:\nodeTest\node_path\public\home.html
- 文件压缩和文件解压
const path = require("path");
const zipper = require("zip-local"); // https://www.npmjs.com/package/zip-local
// 压缩文件夹
export const gzip = () => {
zipper.zip(path.resolve(__dirname, process.cwd() + '/static/jsonFiles'), function (error, zipped) {
if (!error) {
zipped.compress(); // compress before exporting
var buff = zipped.memory(); // get the zipped file as a Buffer
// or save the zipped file to disk
zipped.save(path.resolve(__dirname, process.cwd() + '/static/jsonFiles.zip'), function (error) {
if (!error) {
console.log("saved successfully !");
}
});
}
});
}
// 解压文件夹
export const jzip = () => {
zipper.sync.unzip(path.resolve(__dirname, process.cwd() + '/static/jsonFiles.zip')).save(path.resolve(__dirname, './jsonFiles'));
}
网友评论