NodeJs學習日志(1):windows安裝使用node.js 安裝express,suquelize,sqlite,nodemon

windows安裝使用node.js 安裝express,suquelize,sqlite

系統是win10,默認已經安裝好nodejs與npm

包名作用
expressWeb應用框架
suquelize數據庫ORM
sqlite數據庫
nodemon代碼熱重載

安裝express

  1. 添加express生成器
npm add express-generator@4`

在這里插入圖片描述

  1. 安裝express
npm add express 

在這里插入圖片描述

  1. 創建項目
在當前項目創建express 文件
npx  express --no-view .創建項目初始化項目,項目名稱是: projectName
npx  express --no-view projectName--no-view創建無視圖項目

在這里插入圖片描述

安裝sequelize-cli與sequelize

  1. 安裝sequelize-cli全局安裝
全局安裝
npm i -g sequelize-cli
或者本地
npm i  sequelize-cli

在這里插入圖片描述

  1. 安裝sequelize并初始化
npm install sequelize  
npx sequelize  init

在這里插入圖片描述在這里插入圖片描述

sqlite

  1. 下載sqlite包,解壓后在解壓目錄運行,會創建 testdb_1.db 數據庫

在這里插入圖片描述

解壓拷貝到新的文件夾
在這里插入圖片描述

  1. 生成數據庫
 .\sqlite3.exe testdb_1.db.databases

然后按兩次ctrl+C退出

在這里插入圖片描述

  1. 安裝數據庫sqlie
npm install sqlite3@5.0.0

在這里插入圖片描述

  1. 復制testdb_1.db文件app.js同級目錄,創建db放到里面。
    在這里插入圖片描述

  2. 修改models下的index.js


'use strict';const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const process = require('process');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};// let sequelize;
// if (config.use_env_variable) {
//   sequelize = new Sequelize(process.env[config.use_env_variable], config);
// } else {
//   sequelize = new Sequelize(config.database, config.username, config.password, config);
// }let sequelize;
if (config.use_env_variable) {sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {sequelize = new Sequelize({dialect: 'sqlite',storage: config.storage, // 確保config.json中有storage字段logging: console.log // 顯示SQL日志});
}fs.readdirSync(__dirname).filter(file => {return (file.indexOf('.') !== 0 &&file !== basename &&file.slice(-3) === '.js' &&file.indexOf('.test.js') === -1);}).forEach(file => {const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);db[model.name] = model;});Object.keys(db).forEach(modelName => {if (db[modelName].associate) {db[modelName].associate(db);}
});db.sequelize = sequelize;
db.Sequelize = Sequelize;// 替換原來的 testConnection
const testConnection = async () => {try {await sequelize.authenticate();console.log('? 數據庫連接成功');console.log(`📁 數據庫文件: ${path.resolve(config.storage)}`);// 驗證文件是否存在if (fs.existsSync(path.resolve(config.storage))) {console.log('🔍 數據庫文件已創建');} else {console.log('?? 注意:數據庫文件尚未生成,將在首次操作時創建');}} catch (error) {console.error('? 連接失敗:', error.message);process.exit(1); // 退出進程}
};// 立即調用并處理Promise
testConnection().catch(err => console.error('Unhandled error:', err));module.exports = db;
  1. 修改config文件,路徑在app.js同級的config/config.js
    "storage": "./db/testdb_1.db"為數據庫路徑和名稱
    "database": "testdb_1" , 是數據庫名稱
    這里僅修改開發環境,其他環境根據實際修改
    在這里插入圖片描述
修改config.js,注意路徑
{"development": {"username": "root","password": null,"database": "testdb_1","dialect": "sqlite","host": "127.0.0.1","storage": "./db/testdb_1.db"},"test": {"username": "root","password": null,"database": "database_test","host": "127.0.0.1","dialect": "mysql"},"production": {"username": "root","password": null,"database": "database_production","host": "127.0.0.1","dialect": "mysql"}
}
  1. 打開app.js,在
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

上面添加
require('./models');

  1. 在最后添加
// 啟動服務器
const PORT=3000;
app.listen(PORT, () => {console.log(`Server is running on port ${PORT}`);
});

在這里插入圖片描述

nodemon

  1. 安裝nodemon
 npm install --save-dev nodemon

在這里插入圖片描述

  1. 修改根目錄package.json
根目錄package.json修改:
"scripts": {"start": "node app.js","dev": "nodemon app.js","test": "echo \"Error: no test specified\" && exit 1"
}

在這里插入圖片描述

  1. 啟動程序
開發模式運行
npm run dev生產模式
npm start

在這里插入圖片描述

  1. 訪問

在這里插入圖片描述
5. 修改返回文件,將index.html重命名為index2.html
在這里插入圖片描述

  1. 修改routes下的index.js
var express = require('express');
var router = express.Router();/* GET home page. */
router.get('/', function(req, res, next) {// res.render('index', { title: 'Express' });res.json({ "java": "script" });
});module.exports = router;

在這里插入圖片描述

其他包

包名功能描述安裝狀態
expressWeb框架已安裝
sequelizeORM數據庫工具已安裝
nodemon代碼熱重載已安裝
sqlitesqlite支持已安裝
bcryptjs密碼加鹽哈希未安裝
dotenv環境變量管理未安裝
jsonwebtokenJWT令牌生成未安裝
moment時間日期處理未安裝
cors跨域支持未安裝
multer文件上傳中間件未安裝
svg-captcha圖形驗證碼生成未安裝
nodemailer郵件發送服務未安裝
winston日志記錄工具未安裝
redisRedis客戶端未安裝
amqplibRabbitMQ客戶端未安裝

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/92061.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/92061.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/92061.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Cervantes:面向滲透測試人員和紅隊的開源協作平臺

Cervantes 是一個專為滲透測試人員和紅隊打造的開源協作平臺。它提供了一個集中式工作區,用于集中管理項目、客戶端、漏洞和報告。通過簡化數據組織和團隊協調,它有助于減少規劃和執行滲透測試所需的時間和復雜性。 作為 OWASP 旗下的開源解決方案&…

[Python 基礎課程]猜數字游戲

使用 Python 實現一個猜數字游戲,先隨機生成一個 1 到 100 之間的一個隨機整數,讓用戶猜測這個數是什么,每次都提示用戶猜大了還是猜小了,如果用戶猜對了,提示用戶猜對了,用了多少次,并且之前每…

文件加密實現

一、不依賴外部庫實現 使用自定義的XOR加密算法結合簡單的密鑰擴展。 實現說明 這個方案不依賴任何外部庫,僅使用C標準庫實現: 加密原理:采用XOR加密算法,這是一種簡單但有效的對稱加密方式,相同的密鑰可以用于加密和解…

Unity輕量觀察相機

一、腳本功能簡介ObserveCamera 是一個可直接掛載到任意 GameObject 上的通用攝像機控制腳本,支持以下功能:鼠標右鍵控制攝像機繞自身旋轉(俯仰、水平)鼠標左鍵拖拽目標對象進行平移(局部 XY 平面移動)鼠標…

1深度學習Pytorch-pytorch、tensor的創建、屬性、設備和類型轉換、數據轉換、常見操作(獲取元素、元素運算、形狀改變、相乘、廣播)

文章目錄PyTorchTensor1 Tensor 的創建1.torch.tensor2.torch.Tensor3. 線性張量4. 隨機張量5. 特定數值的張量2 Tensor 常見屬性1 屬性2 設備切換3 類型轉換torch.Tensor.to(dtype)類型專用方法創建張量時直接指定類型與 NumPy 數組的類型互轉4 數據轉換(淺拷貝與深…

五、Istio管理網格外部服務

因語雀與csdn markdown 格式有區別,請查看原文: https://www.yuque.com/dycloud/pss8ys 一、Egress Listener 流量策略 前面學習了 sidecar 自動注入原理、inbound Listener、outbound Listener 等概念,也知道了 EgressListener 的流量策略…

Ubuntu20.04 離線安裝 FFmpeg 靜態編譯包

系統版本 Ubuntu20.04 去現場部署項目,發現現場的設備連接的內網,無法使用apt直接安裝ffmpeg ,想解決也簡單,數據線連接手機使用共享網絡,再使用命令sudo apt install ffmpeg安裝即可,奈何現場百多臺設備&a…

C語言高級編程技巧與最佳實踐

C語言高級編程技巧與最佳實踐 - 完整版 目錄 宏定義與預處理技巧內存管理高級技巧函數指針與回調機制數據結構設計并發與多線程錯誤處理與異常機制性能優化技巧調試與測試技巧跨平臺編程安全編程實踐綜合演示示例 宏定義與預處理技巧 1. 條件編譯與平臺檢測 /*** 平臺和編譯…

cygwin+php教程(swoole擴展+redis擴展)

cygwin 1.下載cygwin安裝程序 :在Windows上獲得Linux的感覺 ? 2. 打開安裝包:setup-x86_64.exe 3.選擇安裝類型 從互聯網安裝首次安裝下載而不安裝僅下載軟件包不安裝從本地目錄安裝遷移程序時使用 4.選擇安裝目錄 5.選擇本地軟件包目錄&#xff…

Ethereum: Uniswap V3核心”Tick”如何引爆DEX的流動性革命?

大家好,今天,我們來聊聊一個在去中心化交易所(DEX)領域,尤其是自Uniswap V3問世以來,變得至關重要的概念——Tick(流動性邊界)。 如果大家接觸過DeFi,可能聽說過Uniswap …

【概念學習】什么是深度學習

人工智能 人工智能的簡潔定義如下:努力將通常由人類完成的智力任務自動化。 因此,人工智能是一個綜合性的領域,不僅包括機器學習與深度學習,還包括更多不涉及學習的方法。 在相當長的時間內,許多專家相信,只…

【MATLAB】(八)矩陣

一.矩陣的定義MATLAB 以矩陣作為數據操作的基本單位,這使得矩陣運算變得非常簡捷、方便、高效。矩陣是由m*n個數q(i1,2,…,m;j1,2,…,n),排成的m行n列數表,記成稱為 mxn 矩陣,也可以記成aij或Am*n。其中,i表示行數,j表…

python的高校考研交流系統

前端開發框架:vue.js 數據庫 mysql 版本不限 后端語言框架支持: 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 數據庫工具:Navicat/SQLyog等都可以 在當今社…

從零開始部署Qwen3-8b大模型到本地

一、方法一(使用docker鏡像進行部署) 安裝Linux服務器,本機測試系統為Ubuntu系統;(帶有2張A100的GPU服務器) 思路為:使用docker部署python環境鏡像在此基礎上安裝vllm拉取Qwen3-8b模型 docker-compose.yml文件部分配…

AI產品經理如何理解和應用Transformer架構,以提升產品的技術能力和用戶體驗?

?你好,我是 ?三橋君? 助你邁向AGI時代!!! 📌本文介紹📌 >> 一、引言 在當今的AI浪潮中,Transformer架構已不再是一個陌生的技術名詞。從OpenAI的GPT系列到Google的BERT,再…

數據結構(四)內核鏈表、棧與隊列

一、內核鏈表基礎1. 什么是 Linux 內核鏈表?Linux 內核鏈表是一種高效的 雙向循環鏈表,廣泛應用于內核模塊開發中,用于管理數據結構。每個節點通過指針連接前一個和后一個元素,實現插入和刪除的高性能。2. 鏈表的定義與初始化在 L…

軟考信息安全工程師11月備考

目前是在職備考,主業是移動端開發工程師。第一個月(8.4-9.6),將分享完下面所有章節內容,平均不到兩天更新一節1.網絡信息安全概述2.網絡攻擊原理與常用方法3.密碼學基本理論4.網絡安全體系與網絡安全模型5.物理與環境安全技術6.認證技術與原理…

使用DrissionPage實現xhs筆記自動翻頁并爬取筆記視頻、圖片

使用DrissionPage實現xhs筆記自動翻頁并爬取筆記視頻、圖片 聲明: 本文章中所有內容僅供學習交流使用,不用于其他任何目的,不提供完整代碼,抓包內容、敏感網址、數據接口等均已做脫敏處理,嚴禁用于商業用途和非法用途,否則由此產生的一切后果均與作者無關! 本文章未經…

使用 input 上傳文件, 選擇文件后再次修改文件再上傳失敗( <input type=“file“ /> 自定義上傳)

業務實際需求:點擊【選擇】按鈕先選擇文件,展示文件的詳情:類型,大小,日期......點擊【上傳】按鈕這個時候才去上傳文件如圖:BUG復現:點擊上傳文件后發現xlsx文件有些數據沒填寫,然后…

Win11 下解決 VScode/Trae 插件加載慢, 整個 VScode/Trae 很卡

最近在使用 Trae 寫代碼, 突然變得很卡, 尤其是插件系統, 比如我打開插件的面板, 以及比如我想預覽一下寫好的 .md 文件 (已安裝了 Markdown Preview Enhanced 插件), 這些都要好幾分鐘才能打開. 最初以為是 Trae 壞掉了, 然后重啟 Trae 不管用, 再重啟電腦居然也不管用, 接著…