zoukankan      html  css  js  c++  java
  • node.js--express学习之路(二)

    自学的道路总是这么的艰辛,但是每当收获得时候却是如此的开心。

    上一篇文章说到本来自己事建了个modules文件来做后台操作的,可是后来又自己觉得这个名字不行,于是重新创建了server文件来编写后台内容。

    大致的目录是这样子的,想法是:

    api文件放一些接口请求处理

    sql里面放一些sql执行语句

    db.js存放服务器连接配置

    index.js就是入口了

     于是迎来自己的一顿操作,

    先是上菜鸟教程,查看express怎么连接数据库:https://www.runoob.com/nodejs/nodejs-mysql.html

    然后在上菜鸟教程,看看怎么写sql语句:https://www.runoob.com/mysql/mysql-insert-query.html

    然后又胡思乱想怎么封装处理才好。

    没有人来教真的太难了,最后只能自己简单处理了。后面再学习优化

    做了个查询跟添加用户的接口,过程比较艰辛,结果比较满意,先说说过程遇到的坑。

    网上都说用那个body-parser就可以取到前端提交的内容,可是我怎么死命操作都还是不行

    const bodyParser = require("body-parser");
    const express = require("express");
    const app = express();
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: false }));

    后来就看提交过去的数据,发现跟我以前提交给后台的好像不太一样。于是发现前端那里有一段headers是这样写的

    axios.defaults.headers.post["Content-Type"] = "application/json;charset=utf-8";

    猜想可能是这个的原因,然后就把上面那个改成

    axios.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";

    呵呵。果然就可以了。好吧,办法总会比问题多。下面附上每个js的内容

    userApi.js

    var models = require("../db");
    var express = require("express");
    var router = express.Router();
    var mysql = require("mysql");
    var $sql = require("../sql/sqlMap");
    // 连接数据库
    var conn = mysql.createConnection(models.mysql);
    conn.connect();
    var jsonWrite = function(res, ret) {
        if (typeof ret === "undefined") {
            res.json({
                code: "1",
                msg: "操作失败"
            });
        } else {
            let data = {};
            // eslint-disable-next-line no-constant-condition
            data = {
                code: 1000,
                msg: "获取成功",
                list: ret
            };
            res.json(data);
        }
    };
    
    // 增加用户接口
    router.post("/addUser", (req, res) => {
        var sql = $sql.user.addUser;
        var params = req.body;
        console.log(params);
        conn.query(sql, [params.name, params.phone, params.passWord], function(
            err,
            result
        ) {
            if (err) {
                console.log(err);
            }
            if (result) {
                jsonWrite(res, result);
            }
        });
    });
    //查询用户接口
    router.post("/select-user", (req, res) => {
        const sql = $sql.user.selectUser;
        //const params = req.body;
        conn.query(sql, function(err, result) {
            if (err) {
                console.log(err);
            }
            if (result) {
                jsonWrite(res, result);
            }
        });
    });
    module.exports = router;

    sqlMap.js

    // sql语句
    
    var sqlMap = {
        // 用户
        user: {
            addUser: "insert into user (name,phone,passWord ) values (?, ?, ?)",
            selectUser: "select * from user"
        }
    };
    
    module.exports = sqlMap;

    db.js

    module.exports = {
        mysql: {
            host: "localhost",
            user: "root",
            password: "root",
            database: "nodestady",
            port: "3306"
        }
    };

    index.js

    const userApi = require("./api/userApi");
    // const fs = require("fs");
    // const path = require("path");
    const bodyParser = require("body-parser");
    const express = require("express");
    const app = express();
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: false }));
    
    //设置允许跨域访问该服务.
    app.all("*", function(req, res, next) {
        res.header("Access-Control-Allow-Origin", "*");
        //Access-Control-Allow-Headers ,可根据浏览器的F12查看,把对应的粘贴在这里就行
        res.header("Access-Control-Allow-Headers", "Content-Type");
        res.header("Access-Control-Allow-Methods", "*");
        res.header("Content-Type", "application/json;charset=utf-8");
        next();
    });
    
    // 后端api路由
    app.use("/user", userApi);
    // 监听端口
    app.listen(3000);
    console.log("success listen at port:3000......");

    到这里已经可以完成简单的请求跟返回了。可是这个远远不够,还在想着怎么去封装请求及相应的数据、数据库怎么去设计、如何打包发布。。。。。。

  • 相关阅读:
    silverlight 跨域文件位置
    Asp.net弹出新窗口,获得返回值
    开通CNblog咯。
    访问IIS元数据库失败
    li可以显示多列
    [转]vs2005 sp1 下载地址、安装方法更新非常慢
    英特尔未来教育核心课程
    很好用的软键盘
    CMD里显示彩色文字
    将输入的中文按要求翻译成拼音
  • 原文地址:https://www.cnblogs.com/chao202426/p/11976381.html
Copyright © 2011-2022 走看看