node常用依赖混剪
注:全部用node写东西要请求自己的资源要用path开放; require不需要用path模块 ;(只有引用路径才用path开放也好引用也好,用require加载文件不需要)
速度安装:npm install --save express body-parser mysql request art-template express-art-template
1.express:
var express = require('express') var app = express() var path = require('path') var fs = require('fs') var http = require('http').createServer(app) let keyCert = { key: fs.readFileSync(path.join(__dirname, './security/privkey.key'), 'utf8'), cert: fs.readFileSync(path.join(__dirname, './security/cacert.pem'), 'utf8') } var https = require('https').createServer(keyCert,app) var io = require('socket.io')(https) // 挂载到https服务上,挂载在什么服务就要在它后面写 app.use(express.urlencoded({ extended: true })) // 接收post数据 app.use('/htmls', express.static('./htmls/')) // 路由已/htmls/开头的去 ./htmls/目录找 app.get('/', (req,res)=>{ res.sendFile(__dirname + '/htmls/a.html') }) https.listen(501, ()=>{console.log('https服务开启成功')}) http.listen(3000, ()=>{console.log('http服务开启成功')}) --------------------------https生成密钥和证书-------------------------- slproweb.com -- products -- Win32/Win64 OpenSSL -- 点击win64 openssl v1.1.1l light下的exe开始下载 -- 安装全部默认即可 -- 找到安装目录里的start文件并右击用管理员运行 -- 想把生成的文件放哪就cd到哪 -- 生成密钥:openssl genrsa -out privkey.key 2048 -- 生成证书:openssl req -new -x509 -key privkey.key -out cacert.pem -days 1095(其它配置全部默认,common name时输入自己的域名即可)
原始: var http = require( 'http' ) var server = http.createServer() server.on( 'request', function(req,res){ var url = req.url if(url = '/'){ res.setHeader( 'content-Type', 'text/plain;charset=utf-8' ) //根据类型设置,html里自带有,fs里第二个参数可直接加 'utf8' res.end('123454你好') } }) server.listen('3000', function ( ) { console.log('服务器启动成功') }) 简化: var http = require('http') http.createServer(function(req, res){ var url = req.url if(url = '/'){ res.setHeader( 'content-Type', 'text/plain;charset=utf-8' ) res.end('你好') } }).listen('3000', function(){ console.log('服务器启动成功') })
node开启https服务简单操作应用 1. 生成密钥和证书的应用下载地址(选win64 openssl v1.1.1l light的exe):http://slproweb.com/products/Win32OpenSSL.html 2.双击安装(安装选项全部默认即可) 3.找到安装目录管理员身份打开start.bat。cd到需要生成密钥及证书的目录,完了可以把密钥和证书放到项目目录里 4.生成密钥:openssl genrsa -out privkey.key 2048 5.生成证书:openssl req -new -x509 -key privkey.key -out cacert.pem -days 1095 (注意: common name时输一下我们的ip,其它都是回车) 6.node里使用: -------------------------------------------- app.js ------------------------------------------- var express = require('express') var app = express() var router = require('./router') var path = require('path') var fs = require('fs') let sslOptions = { key: fs.readFileSync(path.join(__dirname, './privkey.key'), 'utf-8'), cert: fs.readFileSync(path.join(__dirname, './cacert.pem'), 'utf-8') } const https = require('https').createServer(sslOptions, app) https.listen(501,function(){console.log('https开启ok')}) app.engine('html', require('express-art-template')) app.set('views', path.join(__dirname, './htmls/')) app.use(router) app.listen(3000, function(){console.log('http开启ok')}) ----------------------------------------------- roter.js ------------------------------------------ var express = require('express'); var router = express.Router(); var fu = require('./fu') router.get('/', fu.fu1) module.exports = router; ------------------------------------------------- fu.js ------------------------------------------------- fu1 = (req,res) =>{ res.send('ok') } module.exports = { fu1 }
准备:先创建app.js、router.js -> npm init -y -> npm install --save express app.js: var express = require('express') var app = express() var http = require('http').createServer(app) var router = require('./router') app.use(router) app.use(express.urlencoded({ extended: true })) // 表示可以接收post数据 app.use('/htmls/', express.static('./htmls/')) // 路由以/htmls/开头的去./htmls/目录找 app.get('/', function(req, res){ res.sendFile(__dirname + '/webs/htmls/a.html') }) http.listen(3100, function(){console.log('http服务开启成功')}) router.js: var router = require('express').Router() router.get('/', function(req, res){ console.log(req.query) res.send('get') }) router.post('/', function(req, res){ console.log(req.body) res.send('post') }) module.exports = router
准备:先创建app.js、router.js -> npm init -y -> npm install --save express -> npm install --save art-template express-art-template app.js: var express = require('express') var app = express() var router = require('./router') var path = require('path') app.engine('html', require('express-art-template')) app.set('views', path.join(__dirname, './htmls/')) app.use('/node_modules/', express.static(path.join(__dirname, './node_modules/'))) app.use('/htmls/', express.static(path.join(__dirname, './htmls/'))) // 代码里加载 htmls里面的文件 app.use(router) app.listen(3100, function(){console.log('服务开启成功,打开网址 127.0.0.1:3100 即可使用,同一局域网内可互相访问')}) router.js: var router = require('express').Router() router.get('/', function(req, res){ console.log(req.query) res.render('./video.html') }) router.post('/', function(req, res){ console.log(req.body) res.send('post') }) module.exports = router
2.art-template模板引擎:
安装:npm install --save art-template npm install --save express-art-template //一行装完:npm install --save art-template express-art-template 配置:app.engine('html', require('express-art-template')) app.set('views', path.join(__dirname, './htmls/')) 开放:(先导入path模块:var path = require('path')) app.use('/node_modules/', express.static(path.join(__dirname, './node_modules/'))) app.use('/htmls/', express.static(path.join(__dirname, './htmls/'))) 使用: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script src="/htmls/scripts/jquery.min.js"></script> <title>Document</title> <style> html,body{height: 100%; width: 100%; margin: 0; padding: 0;} </style> {{block 'head'}}{{/block}} </head> <body> {{block 'body'}}{{/block}} <script> var $1 = function(id){ return document.getElementById(id)} </script> {{block 'script'}}{{/block}} </body> </html> {{extend '../template01.html'}} {{block 'head'}} <style> </style> {{/block}} {{block 'body'}} <div> </div> {{/block}} {{block 'script'}} <script> </script> {{/block}} //现在多了一个方法:res.render('./a.html', {model:'第一版'});这个路径 ./ 是默认从根目录views出发,不过被我们改成了htmls //不循环取数据:var data = '{{model}}' 或 <h1>版本:{{model}}</h1> table循环展示: res.render('./dbs/dbs.html',{'students': students,'model': req.query.model}) <table border="1" cellspacing="0" style="text-align: center;"> <thead> <tr> <th>序号</th> <th>数据内容</th> <th>添加时间</th> </tr> </thead> <tbody style="height:35px;"> {{ each students }} <tr> <td>{{ $value.id }}</td> <td>{{ $value.content }}</td> <td>{{ $value.time }}</td> </tr> {{ /each }} </tbody> </table>
3.body-parser获取表单post请求体数据:
配置: var bodyParser = require('body-parser') app.use(bodyParser.urlencoded({extended: false})) app.use(bodyParser.json()) // 这两句也可以写成:app.use(bodyParser.urlencoded({extended: true})) ,后面直接 req.query 和获取get一样就可以了 // 后面可以直接使用 req.body 以上方式在2019年已经被弃用,现在不需要下载包,node直接提供了 app.use(express.urlencoded({ extended: true })) // 表示可以接受post数据,使用时直接req.body即可
4.mysql:
文档: https://www.npmjs.com/package/mysql 安装:npm i mysql 建库选:utf8mb4、utf8mb4_general_ci 配置: var mysql = require('mysql'); //1.创建连接 var connection = mysql.createConnection({ host: 'localhost', user: 'me', password: 'secret', database: 'my_db' }); //2.连接数据库 connection.connect(); //3.操作数据库 connection.query('insert into a values(1, "aa", "bb")', function (error, results, fields) { if (error) throw error; console.log( results ); }); //4.关闭连接 connection.end();
5.request网络请求其它API接口:
安装依赖: npm install request -S 引入依赖: var request=require('request'); // 下载 npm install request -S 且只要在此页面引用即可 发送get请求: 简写(默认get): router.get('/gettask',function(req, res){ request('http://127.0.0.1:3000',function(error,response,body){ res.send(body) } ) }) 带请求头: router.get('/gettask',function(req, res){ request( { url:'http://127.0.0.1:3000', method:'get', headers:{'Content-Type':'text/json'} }, function(error,response,body){res.send(body) } ); }) 发送post请求: 1.普通formData 简写: router.get('/gettask',function(req, res){ request.post({url:'http://127.0.0.1:3000', form:{reqType:111}}, function(error, response, body) { res.send(body) }) }) 带请求头(也可以不带): request( { url:'http://127.0.0.1:3000', headers:{'Content-Type':'text/json'}, method:'post', form:{reqType:111} }, function(error,response,body){ res.send(body) } ) 2. json数请求: router.get('/gettask',function(req, res){ var requestData = {key: 'value'} request({ url: url, method: "POST", json: true, headers: { "content-type": "application/json", }, body: JSON.stringify(requestData) }, function(error, response, body) { if (!error && response.statusCode == 200) { console.log(body) // 请求成功的处理逻辑 } }); })
6.pkg用于编译node程序
npm install -g pkg :全局安装pkg 然后修改package.json,添加bin(如果不是service.js的话)和pkg项 //其他配置项 "bin": "app.js",//指定入口文件 "pkg": { "assets": [ "dist/**/*"//指定要打包的静态文件目录 ] } 或 "bin": "app.js", "pkg": { "assets": [ "dist/**/*" ], "targets": [ "node10-win-x64", "node10-macos-x64" ], "output": "webs" } pkg -t win package.json 或 pkg . //编译即可 直接执行 pkg entrance.js || pkg package.json即可打包linux,macos,win3个平台的可执行文件。entrance.js为你node项目的入口文件。 注意:静态文件需要在项目中将文件的引用换成 path.join(__dirname, 'dist'),模板引擎里js文件放在htmls里即可
7.open用于开启node服务时自动打开浏览器
npm install open -S //安装 var open = require("open") // 引入 open("http://127.0.0.1:3000") // 放在开启端口号上面即可
8.socket.io用于处理socket连接
前端socket.io.js地址:https://cdn.bootcdn.net/ajax/libs/socket.io/3.0.4/socket.io.js 1.用户连接到服务器(绑定到了根路径上): var socket = io('//') socket.on('connect', () => { console.log('连接到服务器了,我的ID是:' + socket.id); }) 2.服务器监听到用户的连接(绑定到了如https服务上): io.on("connection", (socket) => { socket.on("disconnect", () => { // 监听用户端口连接}) }) 3.给服务器发送消息: socket.emit('chat message', '你好') 4.服务器监听客服端发消息的事件('chat message')然后全部转发或者广播: socket.on("chat message",(data) => { console.log(`ID为${socket.id}的用户给我发送了消息,内容为:${data}`); io.emit("chat message", data) //socket.broadcast.emit("chat message", msg); }) 5.客服端监听服务器发消息的事件('chat message')然后处理: socket.on('chat message', function(data){ console.log(data) }) ----------------- 信令一套 c新用户刚连接 -- c新建一个事件('new user greet')向服务器发送消息如:'你们好!我是新用户' -- s服务器监听('new user greet')然后新建一个事件('need connect')将消息广播出去 -- c(之前的老用户)监听('need connect')得到新用户的信息 -- c得到新用户的信息成功之后新建事件('ok we connect')向服务器发送新用户的ID和自己的ID -- s服务器监听('ok we connect')然后新建一个事件('ok we connect')只向新用户一个人发送消息如:在你之前的用户有xxx
9.child_process用于使用cmd命令
const iconv = require('iconv-lite') // 为了让中文不乱码 const { exec } = require('child_process'); // 加{},为了直接使用exec,而不是 xx.exec exec('arp -a', { encoding: 'buffer' }, (error, stdout) => { // arp -a获取所有ip地址 console.log('stdout1', iconv.decode(stdout, 'cp936')); });
本文来自博客园,作者:封兴旺,转载请注明原文链接:https://www.cnblogs.com/fxw1/p/14860883.html