nodejs+express简单服务的搭建方法

Nodejs服务器搭建流程

1、在命令提示符内进入需要创建项目的文件夹,创建package.json配置文件

npm init   // 输入指令后,创建package.json文件,并进行基本信息设置(可一直回车)

2、安装web应用及相关模块包

模块包的下载
npm install 模块名  // 当前路径安装最新模块
npm install 模块名 -g // 全局安装,安装计算机C:/xx
npm install 模块名称--save  // 生产环境(默认)
npm install 模块名称--save-dev  // 开发环境

install简写:i
--save : S
--save-dev :D

// 国外下载可能过慢,可使用淘宝镜像源下载
npm install -g cnpm --registry=https://registry.npmmirror.com
cnpm install 包名
web应用开发框架 express

安装:

npm i express
日志模块 morgan (可选择安装)

安装:

npm i morgan
网页图标 serve-favicon

安装:

npm i serve-favicon
post请求读取 body-parser

安装:

npm i body-parser
服务器自动重启 nodemon

安装:

npm i nodemon

启动服务器:

nodemon app.js    // 在app.js所在文件夹的命令提示符内输入
数据库服务 mysql

安装:

npm i mysql
视图模板引擎 ejs (可选择安装)

安装:

npm i ejs
信息存储服务 session

安装:

npm i express-session

3、创建入口文件app.js(完整内容)

const myexpress = require("express");
const logger = require('morgan');
const bodyParser = require('body-parser');
const ejs = require("ejs");
// const xxxRouter = require("xxx")  引入并载入路由文件

const app = myexpress(); // 通过express的全局函数,创建一个服务

// 定义日志和输出级别
app.use(logger('dev'));

// 设置接受的请求信息,设置跨域
app.all('*', function (req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  //  res.header("Access-Control-Max-Age", "3600");
  res.header("Access-Control-Allow-Credentials", "true");
  res.header("Access-Control-Allow-Headers", "X-Requested-With,X_Requested_With,Content-Type");
  res.header("Access-Control-Allow-Methods", 'PUT, POST, GET, DELETE, OPTIONS');
  //res.header("Access-Control-Allow-Credentials", "true");
  next();
});

// 定义浏览器网页标签图片
const favicon = require("serve-favicon")

// 设置post请求
app.use(bodyParser.json({ limit: "2048kb" }));  // 限制数据最大2MB
app.use(bodyParser.urlencoded({ extended: false }));
// session 的配置
app.use(ExpressSession({
  name: "test", // cookie的名字
  secret: "use1", //
  cookie: { maxAge: 8000000 }, //设置session和cookie失效时间,单位:毫秒
  resave: true,
  rolling: true //更新session和cookire失效时间
}))

// 视图模板引擎相关配置
app.set("views", __dirname + "/views");  // 设置视图模板存放路径
app.engine("html", ejs.__express);  // 模板引擎
app.set("view engine", "html");     // 模板文件后缀

// 设置静态资源文件的路径
app.use(myexpress.static(__dirname + "/public"));
// app.use(myexpress.static(__dirname + "/public", { index: "/html/login.html" })) //默认打开静态文件

// 载入网页标签图片
app.use(favicon(__dirname + "/public/img/cxk.jpg"))

// 载入路由文件
// app.use(xxxRouter)

// 配置服务端口监听
app.listen(9999, function () {
  console.log("服务启动,端口号9999");
})

4、创建项目结构文件

例如:
    package.json 依赖文件(命令npm init)
    public 静态资源文件夹(存放html css js images等)
    app.js 项目入口文件
    router 路由
    view 视图
    model 模型层
    controller 控制层

5、创建数据库连接

在 ./model/ 文件夹下创建数据库连接文件
例如:

// dbConfig.js
const mysql = require("mysql");  // 导入mysql模块

/**
 * 接受参数:
 *  sql:sql语句
 *  arr:将数组中的值替换sql中的?,防止sql注入
 *  callback:回调函数,用于接受数据库查询结果
 */
function dbOper(sql, arr, callback) { 
    const myconnect = mysql.createConnection({  // 配置数据库连接信息
        host: "localhost",  // 地址
        user: "root",   // 连接名
        password: "password", // 连接密码
        port: 3306, // 端口号
        database: "databaseName"  // 数据库名称
    });

    myconnect.connect();   // 打开连接
    myconnect.query(sql, arr, callback);  // 执行sql查询,返回结果给回调函数
    myconnect.end();    // 关闭连接
}

module.exports = {  // 进行暴露
    dbOper,
}

6、model层文件编写

model层文件用于书写sql语句进行数据库操作,并返回结果给controller层
例如:

// ./model/menuModel.js
const {dbOper} = require("./dbconfig")

function login({ user, pwd }) {
    let sql = "select * from user where 1=1 and user=? and pwd=? and isDelete=1"
    return dbAction(sql, [user, pwd])
}

function query({ part }) {
    let sql = "select * from menu where 1=1 and isDelete=1"
    if (part) {
        sql += ` and part=${part ?? 0}`
    }
    return dbAction(sql, [])
}

// 操作数据库
function dbAction(sql, arr) {
    arr && (arr instanceof Array) ? arr : []
    return new Promise((resolve, reject) => {  // 返回一个promise对象给Controller层
        dbOper(sql, arr, function (err, data) { 
             // 通过回调函数获取查询结果,并根据据结果更改promise对象的状态
            if (err) {
                reject(err)
            } else {
                resolve(data)
            }
        })
    })
}

module.exports = {
    query,
    login
}

7、controller层文件编写

controller层文件用于处理请求以及对请求进行响应
例如:

// ./controller/menuController.js
const menuMod = require("../model/menuModel")

function login(req, resp) {
    menuMod.login(req.body).then(res => {
        if (res.length > 0) {
            resp.send({ code: 200, message: "请求成功", data: res[0] })
            return;
        }
        resp.send({ code: 403, message: "用户名不存在或密码出错", data: null })
    }).catch(() => {
        resp.send({ code: 500, message: "服务器错误" })
    })
}

function query(req, resp) {
    menuMod.query(req.query).then(res => {
        resp.send({ code: 200, message: "请求成功", data: res })
    }).catch(() => {
        resp.send({ code: 500, message: "服务器错误" })
    })
}

module.exports = {
    query,
    login
}

8、router层文件编写

router层文件用于创建请求接口,对请求进行拦截
例如:

// ./router/menuRouter.js
const myexpress = require("express");
const menuCtrl = require("../controller/menuController")
const menuRouter = myexpress.Router();

// 设置请求方式、接口路径、业务处理的函数
// 菜单相关
menuRouter.get("/system/menu/query", menuCtrl.query)
// 登录(user,pwd)
menuRouter.post("/system/user/login", menuCtrl.login)

module.exports = menuRouter

9、载入接口文件app.js

// app.js
const menuRouter = require("./router/menuRouter")
...  

app.use(menuRouter)
// 最好在文件底部载入(端口监听之上),否则其他配置未加载完,接口会出错,参考第3步

...
启动服务

一般启动

node app.js   // 在app.js的目录下

自动重启(需下载nodemon模块包)

nodemon app.js  // 同样在app.js的目录下

从0开始搭建一个简单的nodejs服务器就这么多了

你可能感兴趣的:(node.js,express)