文章目录
前言
这是一个特别简单且特别容易理解的一个简易demo,可以让帮你打通前后端之间的壁垒,如果想读懂代码,可能需要一定的es6基础,node基础有没有都行。
提示:以下是本篇文章正文内容,下面案例可供参考
一、用node创建一个简易服务器
1.初始化项目
用vscode打开一个空白文件,并在中段运行如下命令来初始化配置
npm init -y
2.引入nodemon
nodemon可以在每次保存后自动重启服务,不用一直来手动关闭重启,使用也特别简单,以前通过node xxx.js来执行某个js文件,现在改为nodemon xxx.js来执行就可以了
npm i nodemon -g
3.创建服务器
新建一个www.js文件,将以下代码复制进去,然后在终端中输入nodemon www.js命令启动,然后打开浏览器,访问127.0.0.1:8888,页面显示hello world,至此一个简易服务器就搭建成功了。
const http = require("http");
// 端口号
const port = 8888;
// 主机地址
const host = "127.0.0.1";
const service = http.createServer((req, res) => {
res.end("hello world");
});
service.listen(port, host, () => {
console.log(`the server listening on ${host}...`);
});
4.createServer回调中的req和res
- req是浏览器发送给服务器的信息,里边包含请求头,url,参数等等
- res是服务器返回给浏览器的信息
二、node中使用mysql
1.引入mysql
npm i mysql -g
2.封装mysql文件
新建一个mysql.js文件,把以下代码复制进去,更多数据库操作可参考官方文档
const mysql = require("mysql");
const connection = mysql.createConnection({
// 主机地址 (默认:localhost)
host: "localhost",
user: "root",
password: "123456",
// 数据库名
database: "map",
});
connection.connect();
// 封装一个函数,返回mysql的操作结果
function executeSql(sql) {
const promise = new Promise((resolve, resject) => {
// 数据库操作
connection.query(sql, (error, results) => {
if (error) {
return resject(error);
}
resolve(results);
});
});
return promise;
}
module.exports = {
executeSql,
};
3.在www.js中使用executeSql函数
稍微修改下www.js文件,返回数据库查询的结果
const http = require("http");
// 引入执行sql语句的函数
const { executeSql } = require("./mysql.js");
// 端口号
const port = 8888;
// 主机地址
const host = "127.0.0.1";
const service = http.createServer((req, res) => {
if (req.method === "GET" && req.url === "/api/demo") {
// 定义sql语句,查询map表中的所有数据
let sql = `select * from map`;
// executeSql返回的是promise
executeSql(sql).then((result) => {
// result就是map表中的所有数据
res.end(JSON.stringify(result));
});
}
});
service.listen(port, host, () => {
console.log(`the server listening on ${host}...`);
});
4.获取post请求中主体的数据
通过监听req的data和end事件来获取post请求的数据,可以通过postman来测试,页面上会显示你通过post请求发送给服务器的数据。
const http = require("http");
// 引入执行sql语句的函数
const { executeSql } = require("./mysql.js");
// 端口号
const port = 8888;
// 主机地址
const host = "127.0.0.1";
const service = http.createServer((req, res) => {
if (req.method === "POST" && req.url === "/api/demo") {
let postData = "";
// 监听req,通过数据流的方式接收数据,chunk是二进制,需要转成字符串
req.on("data", (chunk) => {
postData += chunk.toString();
});
req.on("end", () => {
// postData就是浏览器通过post请求传过来的数据
res.end(JSON.stringify(postData));
});
}
});
service.listen(port, host, () => {
console.log(`the server listening on ${host}...`);
});
三、跨域问题
如果出现跨域,在代码中给请求头中设置允许跨域,加上这行代码就行
const service = http.createServer((req, res) => {
// 允许所有主机访问
res.setHeader("Access-Control-Allow-Origin", "*");
if (req.method === "GET" && req.url === "/api/demo") {
// 定义sql语句,查询map表中的所有数据
let sql = `select * from map`;
// executeSql返回的是promise
executeSql(sql).then((result) => {
// result就是map表中的所有数据
res.end(JSON.stringify(result));
});
}
});
总结
这个demo只是一个最最最最最简单的demo,帮助大家了解前后端分别都是怎么做的,以及node如何连接mysql等。