用Express、MySQL搭建项目(接口以及静态文件获取、文件上传等)

小说:williamhill中文官网作者:海海更新时间:2019-04-23字数:87964

“姐妹们别慌,有老子们在呢!”排长一看那几个衣着单薄,在寒风中哆嗦的女孩子,当即大吼一声,算是为她们壮胆子。

88top优德官网中文版

王小民一愣,随之看了看自己寒酸的衣服,哑然失笑道:“我不是来找工作的,而是来找你们萧董的。”
周诚快步从旁边的小道下来,蹲在了张筠身边,对他低声道:“恩师,那个人今天可能要对您不利了。”

“没错,以后小妖吞噬任何异火都不会产生任何变化,只会让净世之力更强,就算是吞噬面前这一朵净莲妖火也不会有改变,只会更强,而且这一部功法要修成必须要阴阳齐聚。”刘皓说道。

一、简介

    本文将主要基于node.js使用express框架搭建一个后台环境,包括如何自定义项目目录、所用依赖以及中间件、路由以及模板引擎、接口数据获取以及文件上传等内容。

二、后台环境搭建   

    1、新建一个目录node,然后在目录下跑命令:npm init,然后输入一些版本信息;

    2、安装Express

    运行指令:npm install express --save

    3、在根目录下新建一个server.js文件,然后在建立服务器然后监听9999端口,输出hello world!

const express = require("express")

var app = express()

app.get("/",function(req,res){
    res.send("hello world!")
})

app.listen(9999)

在浏览器输入http://localhost:9999就会显示hello world!

三、数据准备,登录注册

  1、这里使用MySQL数据库与node.js链接。我用的是Navicat图形化工具,当然用其他工具也可以,这里将做登录、get列表数据、post文件上传,分页等功能。先在建立数据库然后创建相应的表。

  2、创建一个数据库叫node,然后创建一个表user_table,有三个字段ID,username,password。

  3、做一个注册登录功能

  根目录下新建一个route文件夹,便于管理路由路径模块管理,然后新建一个regLogin.js文件,然后定义router,引入MySQL,建立连接池,然后定义登录跟注册路由,然后导出路由;

const express = require("express");
const router = express.Router();
const mysql = require("mysql");

//连接池
var db = mysql.createPool({host:"localhost",user:"root",password:"*******",database:"node"})


  // 定义网站主页的路由
  router.use("/login", function(req, res) {
    var username = req.body.username;
    var password = req.body.password;
    db.query(`SELECT * FROM user_table WHERE username="${username}"`,(err,data)=>{
        if (err) {
            console.log(err);
            res.status(500).send("database error").end()
        }
        else{
            if (data[0].password==password) {
                res.send("登录成功!")
            }
        }
    })
  });
  // 定义 about 页面的路由
  router.use("/register", function(req, res) {
    var username = req.body.username;
    var password = req.body.password;
    db.query(`insert into user_table(username,password) values ("${username}","${password}")`,(err,data)=>{
        if (err) {
            console.log(err);
            res.status(500).send("database error").end()
        }
        else{
            res.send("注册成功")
        }
    })
  });
  
  module.exports = router;

  4、在server.js里边引入body-parser,body-parser可以自动转换req数据为对象格式,然后使用express.static静态文件托管

const express = require("express")
const regLogin =require("./route/regLogin");//引入路由
const bodyParser = require("body-parser");
var app = express()
app.use(bodyParser.urlencoded({ extended: false }))

//使用路由
app.use("/", regLogin)

//静态文件托管
app.use(express.static("static"));

app.listen(9999)

5.在static静态文件夹下新建以下文件

login.html对注册跟登录的post请求,代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Login</title>
    <script src="jquery.js"></script>
    <script>
        window.onload=function(){
            //注册
            $("#register").click(function(){
                var name = $("#name").val();
                var pass = $("#password").val();
                $.ajax({
                    type:"POST",
                    url:"/register",
                    data:{username:name,password:pass},
                    success:function(res){
                        alert("注册成功")
                    }
                })
            })
            //登录
            $("#login").click(function(){
                var name = $("#name").val();
                var pass = $("#password").val();
                $.ajax({
                    type:"POST",
                    url:"/login",
                    data:{username:name,password:pass},
                    success:function(res){
                        alert("登录成功")
                    }
                })
            })
        }
    </script>
</head>
<body>
    <div>
        用户名:<input type="text" id="name"/><br/>
        密码:<input type="text" id="password"/><br/>
        <button id="login">登录</button>
        <button id="register">注册</button>
    </div>
</body>
</html>

6.校验

当输入用户名密码,点击注册,则显示注册成功,数据库多了一条用户数据。

点击登录则显示登录成功。

四、文件上传功能

 1、文件上传功能需要依赖第三方中间件multer,当然multer有一些参数,可以选择一次上传单个文件,也可以上传多个或者不限制,定义相应的输出路径等参数,详情可以看下官方文档https://www.npmjs.com/package/multer。这里首先在server.js里引入multer并设置参数:

const multer = require("multer");
//输出文件路径
const multerObj = multer({dest:"./static/upload"});

app.use(multerObj.any())

2、新建路由upload.js文件以及static目录下的upload.html上传文件,并在server.js中引入upload路由。

upload.js代码如下:

const express = require("express");
const mysql = require("mysql");
const pathLib = require("path")
const fs = require("fs")

var router = express.Router();

//连接池
var db = mysql.createPool({host:"localhost",user:"root",password:"*******",database:"node"});

router.post("/",function(req,res){
    var title = req.body.title;
    if (req.files[0]) {
        var extName = pathLib.parse(req.files[0].originalname).ext;
        var oldName = req.files[0].path;
        var newName = req.files[0].path+extName;
        var newFileName = req.files[0].filename + extName;
        //重命名加上后缀
        fs.rename(oldName,newName,(err)=>{
            if (err) {
                console.log(err);
                res.status(500).end();
            }
        })

        db.query(`INSERT INTO upload_table (title,src) VALUES ("${title}","${newFileName}")`,(err,data)=>{
            if (err) {
                console.log(err);
                res.status(500).send("err").end()
            }else{
                res.send("上传成功").end()
            }
        })
    }
})

module.exports = router;

3、当选择文件上传,数据库中就会多一天记录

五、模板引擎

  nodejs模板引擎比较常用的有jade跟ejs,jade跟我们平常时的HTML模板不兼容,而ejs跟我们平时所用的前端代码而已结合使用,所以这里将介绍使用ejs,对jade感兴趣的话也可以去了解了解。

1、首先,引入依赖consolidate,consolidate集成了很多模板引擎,可以选择其中的某个模板引擎来使用,包括jade和ejs都在里边。

2、在server.js引入consolidate然后定义相应渲染为HTML,然后在定义路径渲染

const consolidate = require("consolidate");
var app = express()

//模板
app.engine("html",consolidate.ejs);
app.set("view engine","html");
app.set("views",__dirname + "/template");

app.get("/index",function(req,res){
    res.render("index.ejs",{name:"smile",text:"这是后台返回渲染数据",flag:true});
    //res.send("index")
})

3、在template文件夹中新建一个index.ejs,

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
    <div class="warp">
        <% include components/header.ejs%>
        <div>
            这是首页
            <div>名称:<%=name%></div>
            <div>text:<%=text%></div>
            <%if(flag){ %>
                <div>这是flag等于true</div>
            <% } %>
        </div>
    </div>
</body>
</html>

4、最后渲染出来的页面如下:

六、cookie跟session

  1、要使用cookie以及session,得引入两个依赖,cookie-parser,cookie-session,

  2、使用cookie

var express      = require("express")
var cookieParser = require("cookie-parser")
 
var app = express()
app.use(cookieParser())
 
app.get("/cookie", function(req, res) {
  console.log("Cookies: ", "这是返回的cookie")
})

3、使用session

var cookieSession = require("cookie-session")
var express = require("express")
 
var app = express()
 
app.use(cookieSession({
  name: "session",
  keys: ["key1","key2","key3"],//secret keys
 
  // Cookie Options
  maxAge: 24 * 60 * 60 * 1000 // 24 hours
}))

七、express生成器

  如果不愿意自己搭建项目架构,可以使用express生成器来快速创建一个应用的骨架。首先全局安装 express-generator,再跑一些初始命令然后下载一些依赖就可以了,也是比较简单,具体步骤参照下文档就可以http://www.expressjs.com.cn/starter/generator.html。

  

 

编辑:王侯

发布时间:2019-04-23 01:05:13

当前文章://uno2019/8a8rb/

博美娱乐手机app 大卫娱乐登陆 乐都城 恒峰娱乐登录 一号站娱乐招商626595 利高娱乐ligao 名人娱乐官网登录 乐发彩票的邀请码 

我要说两句: (0人参与)

发布