Node.js 开发项目

news2025/4/30 0:30:41

初始化

npm init

## 
npm install 

编辑packege.json 添加,以支持ES6的语法

"type": "module"

连接mysql示例

import db from './db/ops_mysql.js'

const createTable = async () => {
  const insert_data = `
    CREATE TABLE IF NOT EXISTS users (
      id INT AUTO_INCREMENT PRIMARY KEY,
      username VARCHAR(255) NOT NULL,
      password VARCHAR(255) NOT NULL
    );
  `;

  try {
    await db.query(createTableSQL);
    console.log('Table `users` created successfully.');
  } catch (error) {
    console.error('Error creating table:', error);
  } finally {
    await db.end();
  }
};

const insertData = async () => {
  const insert_data = `
    INSERT INTO users (username, password) VALUES ('knight', '112233');
  `;

  try {
    await db.query(insert_data);
    console.log('Data inserted successfully into `users` table.');
  } catch (error) {
    console.error('Error inserting data:', error);
  } finally {
    await db.end();
  }
};

// createTable();

// insertData();

http请求示例

import fetch, { Response } from "node-fetch";
// 发送get请求


const fetchData =  async(userid)=>{
    const url = `https://jsonplaceholder.typicode.com/posts?userId=${userid}`;
    const res = await fetch(url);
    // const data = await res.json();
    /*
    在你的代码中,res.json() 返回的是一个 Promise 对象,而不是直接的数据。如果你在调用 res.json() 前不加 await,
    你实际上是在处理一个 Promise,而不是获取到 JSON 数据
    使用 await:当你在前面加上 await 时,代码会暂停执行,直到 Promise 完成并返回解析后的数据。
    
    */
    const data =  res.json();   
    console.log(data)     

};

fetchData(1)

读取json配置文件

import fs from 'fs/promises';

async function loadConfig(){

    const data  = await fs.readFile('conf/config.json','utf-8');
    const config = JSON.parse(data);
    console.log(config);
    console.log(config.database['host']);

}

loadConfig();

Express 项目开发

依赖

D:\js-res\knight_res>npm list
devops@1.0.0 D:\js-res\knight_res
+-- @elastic/elasticsearch@7.17.14
+-- express@5.1.0
+-- mysql2@3.14.0
+-- node-fetch@3.3.2
+-- puppeteer@24.7.2
`-- sync-mysql@3.0.1

web.js

import express, { Router } from 'express';
import router from './router.js';


const app = express();

const port  = process.env.port || 3000;
console.log(port);
app.listen(port,()=>{
    console.log("running....");
})

app.use(router);
// 静态资源路径
app.use(express.static('static'));
app.use(express.static('public'));

router.js

import express from 'express';
import {query_data_main,id_query_data_main} from './db/ops_mysql.js'
import {ES_DataMain,ES_RW} from './db/ops_es.js'

const router = express.Router();


router.get('/user',(req,res)=>{
    res.send({'name':'rose','age':30})
})

router.get('/{a*bcd}', async(req, res) => {
    res.send('ab?cd')
  })
  
router.get('/user/:id',(req,res,next)=>{
    console.log('Request URL:', req.originalUrl)
    res.send('USER')
})
// check mysql
router.get('/list_data',(req,res)=>{
    res.send(query_data_main())
})

router.get('/list_data/:id',(req,res)=>{
    const id = req.params.id;
    console.log(id);
    res.send(id_query_data_main(id))
})

// es read
router.get('/list_es_data',async(req,res)=>{
    const  body_sql = {
        query: {
            match_all: {}
        }
    }

    const data = await ES_DataMain(body_sql);
    res.send(data);
})

// es read for title
router.get('/list_es_data_title',async(req,res)=>{
    const  body_sql = {
        query: {
            "match": {
                "title": "test"
              }
        }
    }

    const data = await ES_DataMain(body_sql);
    res.send(data);
})

// 写入数据
router.get('/rw_es_data/:name/:age',async(req,res)=>{
    const name = req.params.name;
    const age = req.params.age;
    const  body_sql = {
        name: name,
        age: age
    }
    const data = await ES_RW(body_sql);
    res.send("sucess");
})


export default router;

ops_mysql.js

import mysql from 'sync-mysql';
import path from 'path';
import fs from 'fs';
import { fileURLToPath } from 'url';

// 获取当前模块的目录名
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

const configPath = path.join(__dirname, '../conf/config.json');

// 同步加载配置
function loadConfig() {
    try {
        const data = fs.readFileSync(configPath, 'utf-8'); // 使用同步读取
        return JSON.parse(data)['mysql_info'];
    } catch (error) {
        console.error('Error reading config file:', error);
        throw error;
    }
}

// 创建 MySQL 连接
function createConnection() {
    const mysql_config = loadConfig(); // 同步获取配置
    return new mysql({
        host: mysql_config['host'],
        user: mysql_config['user'],
        password: mysql_config['password'],
        database: mysql_config['database']
    });
}

// 同步查询数据
function query_data(connection) {
    try {
        let sql = 'SELECT * FROM users;'
        const rows = connection.query(sql);
        // console.log(rows);
        return rows;
    } catch (error) {
        console.error('Error executing query:', error);
    }
}

 // 根据id 查询
 function id_query_data(connection,id){
    let sql = `SELECT * FROM users where id = ${id};`
    const rows = connection.query(sql);
    return rows;
 }

// 主查询函数
function query_data_main() {
    const connection = createConnection();
    const data = query_data(connection);
    console.log(data);
    return data;
}


function id_query_data_main(id) {
    const connection = createConnection();
    const data = id_query_data(connection,id);
    return data;
}
// 导出函数
export { loadConfig, createConnection, query_data_main,id_query_data_main };

// 执行查询
query_data_main();

ops_es.js

import path from 'path';
import fs from 'fs';
import { fileURLToPath } from 'url';
import { Client } from '@elastic/elasticsearch'; 

// 获取当前模块的目录名
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

const configPath = path.join(__dirname, '../conf/config.json');

// 同步加载配置
function loadConfig() {
    try {
        const data = fs.readFileSync(configPath, 'utf-8'); // 使用同步读取
        // console.log(data["es_info"]);
        const data_2 = JSON.parse(data);
        console.log(data_2["es_info"]);
        return (data_2["es_info"]);
    } catch (error) {
        console.error('Error reading config file:', error);
        throw error;
    }
}

// 创建 Elasticsearch 客户端
function createClient() {
    const es_config = loadConfig();
    console.log(es_config);
    return new Client({ node: es_config["host"] });
}

// 读取所有数据,异步读取
async function queryData(client,body_sql) {
    const { body } = await client.search({
        index: 'my_index', // 替换为你的索引名称
        body: body_sql
    });
    return body.hits.hits; // 返回查询结果
}

// 写入数据
async function writeData(client,body_sql){
    const response = await client.index({
        index : 'my_index',
        body: body_sql
    })

}


async function ES_DataMain(body_sql) {
    const client = createClient();
    const data = await queryData(client,body_sql);
    console.log(data); // 输出查询结果
    return data; // 返回结果
}


async function ES_RW(body_sql) {
    const client = createClient();
    const data = await writeData(client,body_sql);
    console.log(data); // 输出查询结果
    return data; // 返回结果
}

export { ES_DataMain,ES_RW };

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2348175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络准入控制系统推荐:2025年构建企业网络安全的第一道防线

随着信息技术的飞速发展,企业网络环境日益复杂,阳途网络准入控制系统作为一种先进的网络安全解决方案,其核心是确保网络接入的安全性。 一、网络准入控制系统的基本原理与功能 网络准入控制以“只有合法的用户、安全的终端才可以接入网络”为…

XSS跨站--订单和Shell箱子后门

本文主要内容 手法 XSS平台使用 XSS工具使用 XSS结合其他漏洞 XSS具体使用场景 某订单系统XSS盲打_平台 某Shell箱子系统XSS盲打_工具 [1]订单系统经典案例 第一个简易攻击流程(订单系统):通过平台完成XSS跨站之后&a…

游戏遭遇DDoS攻击如何快速止损?实战防御策略与应急响应指南

是不是很抽象 我自己画的 一、游戏DDoS攻击特征深度解析 游戏行业DDoS攻击呈现复合型特征,2023年监测数据显示,针对游戏服务器的攻击中,63%采用UDP反射放大HTTP慢速攻击组合,攻击峰值达3.2Tbps。攻击者利用游戏协议特性&#xff…

cocos creator使用jenkins打包流程,打包webmobile

windows电脑使用 如果你的电脑作为打包机,一定要锁定自己的ip,如果ip动态获取,可能后续会导致jenkins无法访问,还需要重新配置jenkins和http-server的端口 从jenkins官网下载windows版 Thank you for downloading Windows Stable installer 1.jenkins安…

自动驾驶(ADAS)领域常用数据集介绍

1. KITTI 数据集 简介:由德国卡尔斯鲁厄理工学院与丰田研究院联合创建,是自动驾驶领域最经典的评测基准,涵盖立体视觉、光流、3D检测等任务。包含市区、乡村和高速公路场景的真实数据,标注对象包括车辆、行人等,支持多…

关于IDEA的循环依赖问题

bug描述:(java: 模块循环不支持注解处理。请确保将循环 [...] 中的所有模块排除在注解处理之外) 解决方法:

如何在idea中写spark程序

在 IntelliJ IDEA 中编写 Spark 程序,可按以下步骤进行: 1. 创建新项目 打开 IntelliJ IDEA,选择File -> New -> Project。在左侧面板选择Maven或者Gradle(这里以 Maven 为例),确保Project SDK选择…

RAG工程-基于LangChain 实现 Advanced RAG(预检索优化)

Advanced RAG 概述 Advanced RAG 被誉为 RAG 的第二范式,它是在 Naive RAG 基础上发展起来的检索增强生成架构,旨在解决 Naive RAG 存在的一些问题,如召回率低、组装 prompt 时的冗余和重复以及灵活性不足等。它重点聚焦在检索增强&#xff0…

《Masked Autoencoders Are Scalable Vision Learners》---CV版的BERT

目录 一、与之前阅读文章的关系? 二、标题:带掩码的自auto编码器是一个可拓展的视觉学习器 三、摘要 四、核心图 五、结果图 六、不同mask比例对比图 七、“Introduction” (He 等, 2021, p. 1) 引言 八、“Related Work” (He 等, 2021, p. 3)相…

高压直流输电MATLAB/simulink仿真模型+说明文档

1.模型简介 本仿真模型基于MATLAB/Simulink(版本MATLAB 2018Ra)软件。建议采用matlab2018 Ra及以上版本打开。(若需要其他版本可联系代为转换) 使用一个传输功率为1000MW(500 kV,2 kA)直流互连…

locust压力测试

安装 pip install locust验证是否安装成功 locust -V使用 网上的教程基本上是前几年的,locust已经更新了好几个版本,有点过时了,在此做一个总结 启动 默认是使用浏览器进行设置的 # 使用浏览器 locust -f .\main.py其他参数 Usage: locust […

第十二届蓝桥杯 2021 C/C++组 空间

目录 题目: 题目描述: 题目链接: 思路: 思路详解: 代码: 代码详解: 题目: 题目描述: 题目链接: 空间 - 蓝桥云课 思路: 思路详解&#…

以太网的mac帧格式

一.以太网的mac帧 帧的要求 1.长度 2.物理层

业绩回暖、股价承压,三只松鼠赴港上市能否重构价值锚点?

在营收重返百亿俱乐部后,三只松鼠再度向资本市场发起冲击。 4月25日,这家坚果零食巨头正式向港交所递交上市申请书,若成功登陆港股,将成为国内首个实现“AH”双上市的零食品牌。 其赴港背后的支撑力,显然来自近期披露…

JAVA-StringBuilder使用方法

JAVA-StringBuilder使用方法 常用方法 append(Object obj) 追加内容到末尾 sb.append(" World"); insert(int offset, Object obj) 在指定位置插入内容 sb.insert(5, “Java”); delete(int start, int end) 删除指定范围的字符 sb.delete(0, 5); replace(int start…

【Python】Matplotlib:立体永生花绘制

本文代码部分实现参考自CSDN博客:https://blog.csdn.net/ak_bingbing/article/details/135852038 一、引言 Matplotlib作为Python生态中最著名的可视化库,其三维绘图功能可以创造出令人惊叹的数学艺术。本文将通过一个独特的参数方程,结合极…

Unity AI-使用Ollama本地大语言模型运行框架运行本地Deepseek等模型实现聊天对话(一)

一、Ollama介绍 官方网页:Ollama官方网址 中文文档参考:Ollama中文文档 相关教程:Ollama教程 Ollama 是一个开源的工具,旨在简化大型语言模型(LLM)在本地计算机上的运行和管理。它允许用户无需复杂的配置…

SAP /SDF/SMON配置错误会导致HANA OOM以及Disk Full的情况

一般来说,为了保障每日信息收集,每个企业都会配置/SDF/SMON的监控。这样在出现性能问题时,可以通过收集到的snapshot进行分析检查。如果/SDF/SMON在配置时选取了过多的记录项,或者选择了过低的时间间隔[Interval in seconds],那显…

CMU和苹果公司合作研究机器人长序列操作任务,提出ManipGen

我们今天来介绍一项完成Long-horizon任务的一项新的技术:ManipGen。 什么叫Long-horizon?就是任务比较长。说到底,也是任务比较复杂。 那么这个技术就给我们提供了一个非常好的解决这类问题的思路,同时,也取得了不错的…

大模型(LLMs)强化学习—— PPO

一、大语言模型RLHF中的PPO主要分哪些步骤? 二、举例描述一下 大语言模型的RLHF? 三、大语言模型RLHF 采样篇 什么是 PPO 中 采样过程?介绍一下 PPO 中 采样策略?PPO 中 采样策略中,如何评估“收益”? …