node.js进行登陆验证req.body={}解决办法

本文探讨了前端使用ajax向后端(node.js+mongodb)发送登录信息时,通过添加input的'name'属性解决数据解析问题。作者分享了实践中的关键发现和解决步骤,强调了name属性在跨站请求处理中的必要性。
摘要由CSDN通过智能技术生成

写了一个项目,前端登录信息用ajax发送,后端使用node.js+mongodb进行验证
login.html代码如下

<form action="/login" method="post" enctype="application/x-www-form-urlencoded">
	<div class="form_item_head">
		<p>登录</p>
	</div>
	<div class="form_item">
		<span><img src="./img/login_regist_img/phone_user_img.png" alt=""></span>
		<input type="number" id="phoneNum" placeholder="请输入手机号">
	</div>
	<div class="form_item">
		<span><img src="./img//login_regist_img/password_lock.png" alt=""></span>
		<input type="password" id="passNum" placeholder="请输入密码">
	</div>
	<div class="form_item">
		<input type="submit" id="loginBtn" onclick="submit()" value="登录">
		<input type="reset" id="clearInput" value="重置">
	</div>
</form>

ajax发送数据我也是直接写在了login.html中

function submit(){
	var phoneNum = $("#phoneNum").val().trim()
	var passNum = $("#passNum").val().trim()
	$.ajax({
		url:"http://127.0.0.1:5500/login",
		type:"post",
		data:{
			phone : phoneNum,
			password : passNum
		},
		success : function(res){
			console.log(res);
			if(res.code == 0){
				window.location.href = "./html/main.html?name=" + name;
			}else{
				alert(res.message)
			}
		},
		error : function(){
			alert("出错,请重试。")
		}
	})
}

app.js如下:

const port = 5500
const hostName = '127.0.0.1'
const express = require("express")
const morgan = require("morgan")
const fs = require("fs")
const bodyParser = require("body-parser")
const db = require("./db")
const app = express()
// 后端程序中处理浏览器的跨域请求
app.all('*', function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    res.header('Access-Control-Allow-Headers', 'Content-Type');
    next();
});


app.use(morgan("dev"))
app.use("/",express.static('./'))
app.use("/html",express.static("/"))

// 主页面为登陆界面
app.get('/',function(req,res){
    res.sendFile(__dirname + '/' + 'login.html')
})
// 登陆页面
app.get('/login.html',function(req,res){
    res.sendFile(__dirname + '/' + 'login.html')
})

// 为登录操作添加接口
app.post("/login",function(req,res){
    var phone = req.body.phone
    var password = req.body.password
    console.log("req.body:",req.body);
    console.log(phone,password);

    if(!phone){
        res.json({code : -1,message : "手机号不能为空。"})
    }else if(!password){
        res.json({code : -1,message : "密码不能为空。"})
    }else{
        db.searchUser({phone : phone},function(result){
            if(result.length > 0){
                if(result[0].phone == phone && result[0].password == password){
                    res.json({code : 0,message : "登陆成功。"})
                }else{
                    res.json({code : -1,message : "用户名或密码错误,请重试。"})
                }
            }else{
                res.json({code : -1,message : "用户不存在。"})
            }
        });
    }
})

app.listen(port,hostName,function(){
    console.log(`服务器已启动,监听端口:${hostName}:${port}`);
})

db.js:

// 数据库文件

const mongoClient = require("mongodb").MongoClient
const url = 'mongodb://127.0.0.1:27017/'

// 从数据库进行登录数据查询
function searchUser(whereStr,callback){
    mongoClient.connect(url,{useNewUrlParser : true},function(err,db){
        if(err) throw err
        var dbo = db.db("MongoOne")  //MongoOne为数据库的名字
        dbo.collection("user").find(whereStr).toArray(function(err,result){
            if(err) throw err
            console.log("数据库查询数成功!");
            console.log("查询指定条件的数据...",result);
            callback(result)
            db.close()
        })
    })
}
// 插入数据
function insertUser(myobj,callback){
    mongoClient.connect(url,{useNewUrlParser:true},function(err,db){
        if(err) throw err
        var dbo = db.db("MongoOne")
        dbo.collection("user").insertOne(myobj,function(err,res){
            if(err) throw err
            console.log("用户信息插入成功。");
            callback(res)
            db.close()
        })
    })
}

exports.searchUser = searchUser;
exports.insertUser = insertUser;

我运行后发现req.body = {},并且手机号和密码都没有获取到?
在这里插入图片描述
然后我搜索了N种方法,发现问题所在

// 解析application/json
app.use(bodyParser.json())
// 解析url编码
app.use(bodyParser.urlencoded({extended:false}))

ajax发送来的信息是json格式,但是我服务器解析不了这些数据,在app.js中添加这两行代码即可。
但是问题还没有解决,还是报一样的错。

然后我又找呀找,找了一下午,没找到,但是我记得之前看过几个文章,他们给input加了name属性,我没用过,我索性就加了,哎嘿,成了,验证成功,数据可以读取到了。

<div class="form_item">
	<span><img src="./img/login_regist_img/phone_user_img.png" alt=""></span>
	<input type="number" id="phoneNum" name="phone" placeholder="请输入手机号">
</div>
<div class="form_item">
	<span><img src="./img//login_regist_img/password_lock.png" alt=""></span>
	<input type="password" id="passNum" name="password" placeholder="请输入密码">
</div>

然后我就找了一下name属性,发现w3school中对input的name属性有这样一句话:
在这里插入图片描述
我擦,这个name还很重要嘞。
所以啊,不管写什么,遇到不会的最好的办法就是查文档。

参考文章:node.js+express+mongodb+ajax实现注册、登陆、验证码

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于数据库操作,Node.js 有许多可选的模块和库可以使用。一种常见的选择是使用 `mysql`、`mongodb` 或 `sequelize` 模块来连接和操作数据库。这些模块提供了简单的接口来执行查询、插入、更新和删除等操作。 例如,如果你使用MySQL数据库,你可以使用 `mysql` 模块来连接到数据库并执行查询。以下是一个简单的示例: ```javascript const mysql = require('mysql'); // 创建数据库连接 const connection = mysql.createConnection({ host: 'localhost', user: 'username', password: 'password', database: 'database_name' }); // 连接到数据库 connection.connect((err) => { if (err) throw err; console.log('Connected to the database!'); }); // 执行查询 connection.query('SELECT * FROM tablename', (err, results) => { if (err) throw err; console.log(results); }); // 关闭连接 connection.end(); ``` 关于表单验证Node.js 有许多库可以帮助你处理表单数据的验证验证错误的处理。一些 popular 的表单验证库包括 `express-validator` 和 `joi`。 使用 `express-validator` 的示例代码如下: ```javascript const { body, validationResult } = require('express-validator'); const express = require('express'); const app = express(); // 定义一个路由处理程序 app.post('/create', [ // 对表单字段进行验证 body('username').notEmpty().withMessage('Username is required'), body('email').isEmail().withMessage('Invalid email'), body('password').isLength({ min: 6 }).withMessage('Password must be at least 6 characters long'), ], (req, res) => { // 检查验证错误 const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } // 处理表单数据 // ... // 返回成功的响应 res.json({ message: 'Form submitted successfully' }); }); app.listen(3000, () => { console.log('Server started on port 3000'); }); ``` 以上是一些基本的示例代码,你可以根据自己的需求和数据库选择进行修改和扩展。希望能对你有所帮助!如果有更多问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值