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时输入自己的域名即可)
http、https协议搭建2021/9/8
原始:
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服务简单搭建2020/11/16
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 }
https协议简单搭建
准备:先创建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
express服务简单搭建 2022/09/03
准备:先创建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
express服务加模板引擎渲染页面 2323/3/8

 

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>
npm install --save art-template express-art-template

 

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即可
npm install --save body-parser //要在路由之前

 

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();
npm i mysql

 

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) // 请求成功的处理逻辑
      }
  }); 
})
npm install request -S

 

 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里即可
全局:npm install -g pkg

 

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
npm install socket.io.js

 

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'));
});
自带

 

posted @ 2021-06-07 22:47  封兴旺  阅读(66)  评论(0编辑  收藏  举报

联系方式: 18274305123(微信同号)