使用NodeJS(express框架)完成登录注册功能(超详细)

首先引入express和jwt以及mysql,并解决跨域问题

/ 引入express
const express = require("express")
//这个组件用于接收post数据
const bodyParser = require("body-parser")
var jwt = require("jsonwebtoken")
// 创建服务器对象
const app = express()
const mysql = require("mysql")
const conn = mysql.createConnection({
	host: "127.0.0.1",
	user: "root",
	password: "root",
    //此处是你添加的数据库名
	database: "react-pro",
	multipleStatements: true,
})

app.use(bodyParser.urlencoded({ extended: false }))

app.use(bodyParser.json())

//解决跨域
app.all("*", function (req, res, next) {
	res.header("Access-Control-Allow-Origin", "*")
	res.header("Access-Control-Allow-Headers", "Content-Type")
	res.header("Access-Control-Allow-Methods", "*")
	res.header("Content-Type", "application/json;charset=utf-8")
	next()
})

//开启监听
app.listen(4000, () => {
	console.log("4000端口已经启动。。。")
})

在此之前需要先打开数据库,然后可以使用nodemon运行一下看效果

接着开始写注册接口,此处为register

//post请求
app.post("/register", (req, res) => {
	var userName = req.body.userName
	var passWord = req.body.passWord
	if (!userName || !passWord) {
		res.send({
			code: 0,
			msg: "用户名与密码为必传参数...",
		})
		return
	}
	if (userName && passWord) {
		const result = `SELECT * FROM user WHERE userName = '${userName}'`
		conn.query(result, [userName], (err, results) => {
			if (err) throw err
			if (results.length >= 1) {
				//2、如果有相同用户名,则注册失败,用户名重复
				res.send({ code: 0, msg: "注册失败,用户名重复" })
			} else {
				const sqlStr = "insert into user(userName,passWord) values(?,?)"
				conn.query(sqlStr, [userName, passWord], (err, results) => {
					if (err) throw err
					if (results.affectedRows === 1) {
						res.send({ code: 1, msg: "注册成功" })
					} else {
						res.send({ code: 0, msg: "注册失败" })
					}
				})
			}
		})
	}

	console.log("接收", req.body)
})

然后是登录,login

app.post("/login", (req, res) => {
	var userName = req.body.userName
	var passWord = req.body.passWord
	if (!userName || !passWord) {
		res.send({
			code: 0,
			msg: "用户名与密码为必传参数...",
		})
		return
	}
	const sqlStr = "select * from user WHERE userName=? AND passWord=?"
	conn.query(sqlStr, [userName, passWord], (err, result) => {
		if (err) throw err
		if (result.length > 0) {
			// 生成token
			var token = jwt.sign(
				{
					identity: result[0].identity,
					userName: result[0].userName,
				},
				"secret",
				{ expiresIn: "1h" },
			)
			console.log(token)
			res.send({ code: 1, msg: "登录成功", token: token })

			// 如果没有登录成功,则返回登录失败
		} else {
			// 判断token
			if (req.headers.authorization == undefined || req.headers.authorization == null) {
				if (req.headers.authorization) {
					var token = req.headers.authorization.split(" ")[1] // 获取token
				}
				jwt.verify(token, "secret", (err, decode) => {
					if (err) {
						res.send({ code: 0, msg: "登录失败" })
					}
				})
			}
		}
	})
})

完整node.js

// 引入express
const express = require("express")
//这个组件用于接收post数据
const bodyParser = require("body-parser")
var jwt = require("jsonwebtoken")
// 创建服务器对象
const app = express()
const mysql = require("mysql")
const conn = mysql.createConnection({
	host: "127.0.0.1",
	user: "root",
	password: "root",
	database: "react-pro",
	multipleStatements: true,
})

app.use(bodyParser.urlencoded({ extended: false }))

app.use(bodyParser.json())
// app.use(bodyParser.urlencoded({ extended: false }))
// app.use(bodyParser.json({ type: "application/*+json" }))
//解决跨域
app.all("*", function (req, res, next) {
	res.header("Access-Control-Allow-Origin", "*")
	res.header("Access-Control-Allow-Headers", "Content-Type")
	res.header("Access-Control-Allow-Methods", "*")
	res.header("Content-Type", "application/json;charset=utf-8")
	next()
})

app.post("/login", (req, res) => {
	var userName = req.body.userName
	var passWord = req.body.passWord
	if (!userName || !passWord) {
		res.send({
			code: 0,
			msg: "用户名与密码为必传参数...",
		})
		return
	}
	const sqlStr = "select * from user WHERE userName=? AND passWord=?"
	conn.query(sqlStr, [userName, passWord], (err, result) => {
		if (err) throw err
		if (result.length > 0) {
			// 生成token
			var token = jwt.sign(
				{
					identity: result[0].identity,
					userName: result[0].userName,
				},
				"secret",
				{ expiresIn: "1h" },
			)
			console.log(token)
			res.send({ code: 1, msg: "登录成功", token: token })

			// 如果没有登录成功,则返回登录失败
		} else {
			// 判断token
			if (req.headers.authorization == undefined || req.headers.authorization == null) {
				if (req.headers.authorization) {
					var token = req.headers.authorization.split(" ")[1] // 获取token
				}
				jwt.verify(token, "secret", (err, decode) => {
					if (err) {
						res.send({ code: 0, msg: "登录失败" })
					}
				})
			}
		}
	})
})

//post请求
app.post("/register", (req, res) => {
	var userName = req.body.userName
	var passWord = req.body.passWord
	if (!userName || !passWord) {
		res.send({
			code: 0,
			msg: "用户名与密码为必传参数...",
		})
		return
	}
	if (userName && passWord) {
		const result = `SELECT * FROM user WHERE userName = '${userName}'`
		conn.query(result, [userName], (err, results) => {
			if (err) throw err
			if (results.length >= 1) {
				//2、如果有相同用户名,则注册失败,用户名重复
				res.send({ code: 0, msg: "注册失败,用户名重复" })
			} else {
				const sqlStr = "insert into user(userName,passWord) values(?,?)"
				conn.query(sqlStr, [userName, passWord], (err, results) => {
					if (err) throw err
					if (results.affectedRows === 1) {
						res.send({ code: 1, msg: "注册成功" })
					} else {
						res.send({ code: 0, msg: "注册失败" })
					}
				})
			}
		})
	}

	console.log("接收", req.body)
})

//开启监听
app.listen(4000, () => {
	console.log("4000端口已经启动。。。")
})

可以看下效果(样式之类的会在以后文章提到)

为空的情况:

 用户名重复的情况:

注册成功后跳到登录页

 密码和用户名失败的情况:

  • 12
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 答:以下是一个完整的nodejs express框架代码:const express = require('express'); const app = express();app.get('/', (req, res) => { res.send('Hello World!'); });app.listen(3000, () => { console.log('Server is listening on port 3000'); }); ### 回答2: Node.js是一个运行在服务器端的 JavaScript 运行环境,而Express则是基于Node.js的一个简洁、灵活的Web应用框架,下面是一个完整的Node.js Express框架的代码示例: 首先,确保你已经安装了Node.js和npm包管理器。然后创建一个新的文件夹并打开终端(命令行窗口),将该文件夹作为工作目录。 1. 初始化项目: 在终端中运行以下命令来初始化一个新的Node.js项目: ``` npm init ``` 按照提示,依次输入项目名称、版本等信息。 2. 安装依赖: 接下来,安装Express框架和其它所需的依赖。 ``` npm install express ``` 3. 创建主文件: 在项目文件夹中创建一个名为`app.js`的文件,并输入以下代码: ```javascript const express = require('express'); const app = express(); // 定义路由 app.get('/', (req, res) => { res.send('Hello World!'); }); // 监听端口 const port = 3000; app.listen(port, () => { console.log(`Server is running on port ${port}`); }); ``` 4. 运行应用: 在终端中输入以下命令来运行应用: ``` node app.js ``` 此时,服务器将在本地的3000端口上启动。 现在,你可以在浏览器中访问`http://localhost:3000`,显示"Hello World!"。 这只是一个简单的示例,你可以根据需要添加更多的路由和功能。你还可以使用`npm`安装和使用其他插件和中间件,以满足你的需求。 希望这个简单的示例对你有所帮助。请注意,在实际使用中,你可能需要更多的配置和安全性措施。 ### 回答3: 下面是一个完整的Node.js Express框架代码示例: ```javascript // 引入所需的库 const express = require('express'); const app = express(); // 中间件设置 app.use(express.json()); // 解析JSON请求体 app.use(express.urlencoded({ extended: false })); // 解析URL编码请求体 // 路由定义 app.get('/', (req, res) => { res.send('Hello World!'); }); // 启动服务器 const port = 3000; app.listen(port, () => { console.log(`服务器已启动,正在监听端口 ${port}`); }); ``` 上述代码展示了一个基本的Node.js Express框架。它首先引入`express`库并创建一个应用实例。接下来,使用`app.use`来配置所需的中间件。在这个例子中,我们使用了两个常用的中间件:`express.json()`用于解析JSON请求体,`express.urlencoded()`用于解析URL编码请求体。 然后,我们定义了一个根路径的GET请求处理程序,当浏览器请求根路径时,服务器返回"Hello World!"。 最后,使用`app.listen`方法启动服务器并开始监听在指定的端口上(在此示例中是3000端口)。 要运行以上代码,需要在你的Node.js环境中安装`express`库,可以在终端中运行`npm install express`命令进行安装。 当你运行该代码时,你将看到终端输出`服务器已启动,正在监听端口3000`。这表示你的服务器已经成功启动,并且可以在浏览器中访问`http://localhost:3000`来查看"Hello World!"的响应。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值