nodejs typescript express mongodb 搭建简易服务器

2023-11-13

安装依赖

npm i express mongoose ts-node typescript nodemon @types/express @types/node express-session @types/express-session

新建 tsconfig.json

{
    "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "outDir": "./lib",
        "strict": true,
        "esModuleInterop": true,
        "skipLibCheck": true,
        "forceConsistentCasingInFileNames": true
    }
}

新建 nodemon.json

{
    "restartable": "rs",
    "ignore": [".git", "node_modules/", "dist/", "coverage/"],
    "watch": ["src/"],
    "execMap": {
        "ts": "ts-node --files"
    },
    "env": {
        "NODE_ENV": "development"
    },
    "ext": "js,json,ts"
}

修改 package.json

    "scripts": {
        "start": "node lib/app.js",
        "dev": "nodemon --config nodemon.json src/app.ts"
    },

新建 src/app.ts

import express from "express";
import path from "path";
import { controller } from "./controller";
import mongoose from "mongoose";
/** 链接数据库 */
mongoose.connect("mongodb://127.0.0.1/xxx");

const app = express();
/** 解析 post 数据 */
app.use(express.urlencoded({ extended: false }));
app.use(express.json());
/** 静态资源 */
app.use(express.static(path.join(__dirname, "../public")));

app.listen(3022, () => {
    console.log("服务器启动, http://localhost:3000");
    // 控制器
    controller(app);
});

新建 src/models.ts

import { Schema, model } from "mongoose";

export interface User {
    /** 名字 */
    name: string;
    age: number
}

const schema = new Schema<User>({
    name: { type: String, required: true, unique: true },
    age: { type: Number, required: true },
});
schema.index({ name: 1 });
export const UserModel = model<User>("User", schema);

新建 src/controller.ts

import { Application } from "express";
 
export function controller(app: Application) {
    app.get("/test", (req, res) => {
        res.send(json("测试", "成功"));
    });
}

export function json(data?: any, message?: string) {
    return {
        code: !!data === true ? 1 : 0,
        data,
        message,
    };
}

启动项目

npm run dev

打包项目

tsc

运行打包项目

npm run start

拓展

使用 ejs 引擎作为前端渲染引擎

npm i ejs
app.set("views", path.join(__dirname, "./views")); //设置模版路径在views目录(默认)
app.set("view engine", "ejs"); //模版引擎设置为 ejs

添加 gulp 打包项目

npm i gulp

添加指令

{
	"build": "tsc && gulp"
}

添加 gulpfile.js 文件

const { src, dest, series } = require("gulp");
 
function views() {
    return src("./src/views/**/*").pipe(dest("./lib/views/"));
}

exports.default = series(views);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nodejs typescript express mongodb 搭建简易服务器 的相关文章

随机推荐

  • el-dialog弹窗改变默认样式,改变弹窗高度位置

    el dialog弹窗改变默认样式 改变弹窗高度位置 在el dialog上添加class view dialog
  • 4https 原理

    春光正暖 情绪微高 穿行于街巷 浮现三两过往事 不惧时光肆意流淌 新的一年 万事顺遂 文章目录 1 http的缺点 2 加密算法 2 1 对称加密 2 2 非对称加密 算法的实现的思路 公钥加密 私钥解密 2 3 ca的诞生 ca如何生成证
  • python---装饰器进阶之路

    装饰器的本质 在不改变被装饰对象原有的 调用方式 和 内部代码 的情况下给被装饰对象添加新的功能 装饰器的原则 对扩展开放 对修改封闭 为何要用装饰器 软件的设计应该遵循开放封闭原则 即对扩展是开放的 而对修改是封闭的 对扩展开放 意味着有
  • PR/AE/FCPX比较好用的插件有哪些?

    Beauty Box 磨皮润肤美容插件 Digital Anarchy比较出众的一款视频磨皮美白降噪插件 支持系统 windows Mac 软件版本 PR AE CS6 2023 Davinci Resolve 达芬奇11以上 FCPX 1
  • 机器学习二:支持向量机

    支持向量机 1 介绍 2 对偶问题 3 非线性数据 3 1 核函数与核技巧 3 1 1 数学解释 3 1 2 几种常用的核函数 4 SVM 响应离群点 4 1 软间隔 4 2 正则化 4 3 参数调整 4 3 1 SVM C Paramet
  • OpenGL学习书籍推荐

    1 opengl 红宝书 2 Nehe的Opengl教程 网上的文章 能形成一个完整系列的就是 Nehe的 有点老 不过不影响学习理论 3 知乎上的这个帖子也提供了不少思路 https www zhihu com question 2416
  • 汉堡王什么汉堡好吃_汉堡王9款汉堡测评,牛肉和鸡肉你喜欢哪个?

    从第一次吃汉堡王到现在已经好久了 数了一下 他们家的汉堡我已经吃了9种了 虽然还没有全部吃过一遍 今天就来盘点一下汉堡王的汉堡吧 小皇堡 第一次吃的就是小皇堡 当时不是很能吃得惯 所以从那时起就有点不太敢尝试皇堡系列 后来真香了 里面有西红
  • [中奖]第九届“泰迪杯”挑战赛A题

    问题概述 题目1如下 赛题有2个点 分别是 确定数据指标 即确定哪些特征是决定财务造假与否的关键特征 预测造假公司 训练模型 然后跑测试数据即可 预处理 首先使用missingno2 对全局数据进行观测 看一看缺失值等情况 然后删去无用的特
  • retrofit应用详解与源码解析--源码解析

    本文出自门心叼龙的博客 属于原创类容 未经允许 不得转载 本专栏的同步视频教程已经发布到CSDN学院 https edu csdn net course detail 30408 上一篇文章我们通过12个小案例 给大家演示了retrofit
  • Ado.net批量插入数据

    采用的是SqlBulkCopy方法 数据库是sql server 示例代码地址 https gitee com Alexander360 LearnAdoNet SqlBulkCopy批量插入的方法如下 包括list转datatable方法
  • Python书写的格式规范

    Python书写的格式规范 1 英文版Python书写格式 2 中文版Python书写规范
  • C++之const类成员变量,const成员函数,const指针

    https www cnblogs com cthon p 9178701 html 结合下面这个链接观看更佳 讲常量指针和指向常量的指针的 https www cnblogs com lihuidashen p 4378884 html
  • CnOCR 使用教程

    目录 一 简介 二 使用教程 三 效果展示 一 简介 CnOCR 是 Python 3 下的文字识别 Optical Character Recognition 简称OCR 工具包 支持简体中文 繁体中文 部分模型 英文和数字的常见字符识别
  • Non-parseable settings C:\Users\xxxx.m2\settings.xml:错误 maven项目下载jar是空包解决方案

    在用maven项目下载我们要引入相对应的jar时候控制台报错 Non parseable settings C Users xxxx m2 settings xml expected START TA G or END TAG not TE
  • [python2.7版本] pip安装包 或者 pip升级pip版本出现此错误

    File tmp pip build vD3Ntt pip setup py line 7 def read rel path str gt str SyntaxError invalid syntax Command python set
  • 左手系和右手系转换最最最简便方法

    左手系和右手系转换最最最简便方法就是交换Y Z轴 只需一个矩阵变换 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 不需翻转Z轴 不需转置矩阵 不需修改缠绕方向 既可用于转换模型坐标 又可用于世界矩阵 视矩阵 实在是模型转换
  • 测试用例设计白皮书--边界值分析方法

    测试用例设计白皮书 边界值分析方法Author Vince 来源 http blog csdn net vincetest 一 方法简介1 定义 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法 通常边界值分析法是作为对等价类
  • mysql日期查询

    今天 select from 表名 where to days 时间字段名 to days now 昨天 SELECT FROM 表名 WHERE TO DAYS NOW TO DAYS 时间字段名 lt 1 近7天 SELECT FROM
  • 开源服务器日志实时查看系统,开源日志管理系统

    开源日志管理系统 内容精选 换一换 鲲鹏工程师培训及认证为客户提供鲲鹏认证伙伴基于open系开源内核构建的商业软件培训 包含商业软件介绍 特性描述 操作使用 开发指导等内容 来自 其他 MindX DL Sample的系统架构如图1所示 各
  • nodejs typescript express mongodb 搭建简易服务器

    安装依赖 npm i express mongoose ts node typescript nodemon types express types node express session types express session 新建