简单实现express前后端交互

        上了web课,对于使用PHP实现前后端交互已经有了一定程度的了解(可以说是会用了)。但是一直以来,觉得node.js的前后端交互与PHP的前后端交互,仿佛很相似,但是一写就卡住。

        这几天通过一个小例子摸到了一点门路。此处以jQuery实现的ajax为例。

        话不多说,看代码。

首先展示目录结构:

project_name

---local_modules

   ---connection.js

---node_modules(此处展开省略)

---public

   ---css

   ---js

      ---c-test.js

   ---test.html

---router

   ---s-test.js

---index.js

---package-lock.json

---package.json

index.js:

var express = require('express'); 
var app = express();   

const path = require('path');

app.use(express.json());
app.use(express.urlencoded({ extended: false }));

app.use('/static',express.static(path.join(__dirname,'public')));   //静态资源访问功能


var test=require('./router/s-test');
app.use('/test',test);//为路由对象匹配请求路径

var server = app.listen(8082, function () { 
    console.log("Server running at http://localhost:8082"); 
});

        端口可自行修改,此处为8082。由于请求的路径是“/test”,因此打开的地址应该为:http://localhost:8082/test

connection.js:

var mysql = require('mysql');

const pool = mysql.createPool({
    host:'localhost',
    port:3306,
    database:'test',
    user:'root',
    password:'123456',
    connectionLimit:20,
    multipleStatements:true
});

module.exports = pool;

        可根据自身的数据库信息进行修改

test.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>TEST</title>
</head>
<body>
    <h1 id="t"></h1>

    <input type="text" placeholder="请输入查询的用户名" id="name">
    
    <button id="btn">显示</button>

    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
    <script src="/static/js/c-test.js"></script>
</body>
</html>

c-test.js:

function onBtnClick(){
    var name=$('#name').val();
    console.log(name);
    $('#t').text(name);
    $.post('/test',
    {
        username:name
    },
    function(data){    
        console.log(data);
        alert(data.msg);
        var rs=data.data;
        console.log(rs[0].realname);
        var str="<ul>";
        str+="<li>"+rs[0].realname+"</li>";
        str+="</ul>";
        $('#t').append(str);
    },"json");
}

function init() {
    $('#btn').on('click',onBtnClick);
}

init();

s-test.js:

var express = require('express');
var fs = require('fs');
const pool = require('../local_modules/connection');
var test = express.Router();

test.get('/',(req,res)=>{
    fs.readFile('./public/test.html', (err,data)=> {
        res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
        return res.end(data);
    }); 
})

test.post('/',(req,res,next)=>{
    var username=req.body.username;
    console.log(username);
    pool.getConnection(function (err, conn) {
        if (err) {
            console.log("数据库连接失败");
        } else {
            console.log("数据库连接成功");
            // 定义sql查询语句
            let sql = "select * from user where username = ?";       
            // 查询操作
            // console.log(sql);

            conn.query(sql, [username], function (err, result) {
                if (err) {
                    console.log("数据库查询失败");
                } else {
                    if(result[0]==null){
                        res.status(200).json({
                            code: 0,
                            msg: '用户不存在!',
                            data: ''
                        });
                    }else{
                        res.status(200).json({
                            code: 1,
                            msg: '用户存在!',
                            data: result
                        });
                    }
                }
            })
            conn.release();

            // res.status(200).json({
            //     code: 1,
            //     msg: '成功!',
            //     data: ''
            // });
        }
    })
});

module.exports = test;

        这个小例子实现的功能是,输入用户名,显示用户的真实姓名。所以数据库test的表user包含的字段至少有username和realname。

        大概就是这样,虽然是个小例子,但是通过这个小例子,还是可以掌握很多东西的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现小程序前后交互,可以使用以下步骤: 1. 在后使用 Express 框架创建一个 RESTful API,提供数据接口。 2. 在小程序中使用 wx.request() 方法向后发送请求,获取数据。 3. 后接收到请求后,通过路由进行处理,并查询数据库等操作获取数据。 4. 后将获取到的数据以 JSON 格式返回给小程序。 5. 小程序接收到数据后,进行处理并展示给用户。 下面是一个简单Express代码示例: ```javascript const express = require('express'); const app = express(); // 设置允许跨域访问 app.use((req, res, next) => { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With'); res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS'); if (req.method === 'OPTIONS') { res.send(200); } else { next(); } }); // 定义路由 app.get('/api/data', (req, res) => { // 查询数据库等操作获取数据 const data = [{name: '张三', age: 18}, {name: '李四', age: 20}]; // 将数据以 JSON 格式返回 res.send(data); }); // 启动服务 app.listen(3000, () => { console.log('Server is running at http://localhost:3000'); }); ``` 在小程序中发送请求的代码示例: ```javascript wx.request({ url: 'http://localhost:3000/api/data', method: 'GET', success: (res) => { console.log(res.data); } }); ``` 需要注意的是,在小程序中发送请求时,需要在 app.json 文件中配置域名白名单,否则会出现跨域访问问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值