node通过express搭建自己的服务器
发布时间 - 2026-01-11 03:29:38 点击率:次前言

为了模拟项目上线,我们就需要一个服务器去提供API给我们调用数据。这次我采用express框架去写API接口。所有请求都是通过ajax请求去请求服务器来返回数据。第一次用node写后端,基本就是摸着石头的过河,文中有什么不足不处欢迎指出。
安装express框架
传送门: express官方
然后介绍一下需要引入的中间件,node本身提供了一些库。我们可以直接通过require去引用,对于未提供的库,我们也可以通过手动npm去安装
var fs = require('fs'); 操作文件模块
var http = require('http'); http模块
var url = require('url'); 获取url信息模块
var qs = require('querystring'); 处理url参数模块
var path = require('path'); 文件路径模块
var bodyParser = require('body-parser'); 请求体对象化 (必须)否则后台无法解析前端发送的body内容
接下来直接启用模块
app.use(bodyParser.json());
// 访问静态资源文件 这里是访问所有dist目录下的静态资源文件
app.use(express.static(path.resolve(__dirname, '../dist')))
app.use(express.static('public'));
// 因为是单页应用 所有请求都走/dist/index.html
app.get('/', function(req, res) {
const html = fs.readFile(path.resolve(__dirname, '../dist/index.html'), 'utf-8');
res.send(html)
});
//处理请求跨域
app.all('*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.header("Content-Type", "application/json;charset=utf-8");
res.header("Access-Control-Allow-Headers", "content-type");
next();
});
准备工作做完可以开始动手写接口了。关于数据库可以模拟一个json,也可以真实模拟上线数据库。
下面会划成3块说明——数据库的对接、请求的操作、文件请求的操作。
数据库连接
这里我假设你已经安装了mongodb数据库并成功启用。仔细阅读express教程你会发现框架提供了对mongodb的支持,mongodb有非常多的扩展插件去使用该数据库 比如mongoose。这里我们使用express官方提供的mongoskin来链接数据库。
$ npm install mongoskin
#####官方实例
var db = require('mongoskin').db('localhost:27017/animals');
db.collection('mamals').find().toArray(function(err, result) {
if (err) throw err;
console.log(result);
});
安装成功后 ,我们就首先把使用的数据库引入,代码如下
var db = require('mongoskin').db('mongodb://localhost:27017/blog');
var ObjectId = require('mongodb').ObjectID;
以上代码表示我们成功连接了blog数据库并且启用了私有ID,objectID是mongodb生成数据自动添加的ID。可以直接拿来用。到这里数据库和服务器就已经对接完毕了。
对前端发送的请求进行处理
处理get请求
/**
* 获取文章信息
*/
app.get('/article/info', function (req, res) {
>>> 获取请求参数
var arg = qs.parse(url.parse(req.url).query);
var id = arg.id;
>>> 链接数据库根据参数查找文档并返回
db.collection('articleList').find({ "_id": ObjectId(id)}).toArray(function(err, result) {
if (err) throw err;
console.log(result)
res.end(JSON.stringify(result))
});
});
以上代码就实现了对一个get请求的处理,通过参数模块获取了url的参数,db也就是已经连接的数据库。根据ID对‘articleList'的数据表进行搜索,处理完毕后 通过res.end()返回数据结束响应。
处理post请求
/**
* 提交留言信息
*/
app.post('/board/post', function (req, res) {
>>>> 获取请求参数
var data = {
date: req.body.date,
name: req.body.name,
content: req.body.content,
time: req.body.time,
position: req.body.position
};
>>> 链接数据库并插入数据
db.collection('board').insert(data, function(err, result) {
if(err) {
res.end('Error:'+ err)
}
res.end('提交成功')
});
});
post请求的参数获取和get不同 可以直接通过req.body去获取前端传输的请求体。通过js对象的方式去获取参数。然后根据参数执行数据库操作。到此,基本的请求也就介绍完毕了。下面说下怎么处理图片的上传此类常见的文件操作需求。
对前端的文件请求进行处理
为了简化操作,我们可以引入multer模块来处理文件,代码如下
var multer = require('multer');
var storage = multer.diskStorage({
//设置上传后文件路径,uploads文件夹会自动创建。
destination: function (req, file, cb) {
cb(null, './public/uploads')
},
//给上传文件重命名,获取添加后缀名
filename: function (req, file, cb) {
var fileFormat = (file.originalname).split(".");
cb(null, file.fieldname + '-' + Date.now() + "." + fileFormat[fileFormat.length - 1]);
}
});
//生成上传模块,让API调用
var upload = multer({
storage: storage
}).single('file');
以上代码就成功引入了文件上传模块,通过该模块我们可以快速生成相应内容,具体使用方法可以查看官方文档。准备工作完成后,在项目中使用:
/**
* 图片上传
*/
app.post('/upload', function (req, res) {
upload(req, res, function (err) {
if (err) {
console.log(err)
return
}
console.log(req.file)
res.end(JSON.stringify(req.file))
})
});
//图片上传到服务器 ,向客户端返回文件信息
比如文件的存储位置,之后就可以通过地址访问服务器的图片
/**
* 图片删除
*/
app.post('/image/delete', function (req, res) {
fs.unlink(req.body.path, function(err) {
if (err) {
return console.error(err);
}
res.end("文件删除成功!");
});
});
这里上传图片我们就直接使用了直接之前已经写好的upload模块,当该接口请求成功时 ,文件就已经上传成功了,如果你需要一个预览过程,那不应该直接调用上传接口 。通过原生node fs模块 我们也能对添加的文件进行删除,修改操作。
上线以及上线后遇到的history模式的刷新问题
上线过程我们可以当作就是换一台电脑跑程序,这里我用的是阿里云的服务器。在云服务器安装好环境好,把项目克隆进去 ,再装个forever之类的永久运行库,start ~ok 这样你的项目就永远在运行了。如果需要www访问 ,还需要买个dns解析 和域名,指向你的服务器。
以上我们如果在本地跑项目基本已经可以没问题。但项目上线后一刷新。啊啦??404什么鬼?打开百度一查。那炉火多~~当前端启用hisory模式,后台也必须开启对history的支持。express 环境如下:
var history = require('connect-history-api-fallback');
var connect = require('connect');
///////
app.use(history());
更新代码刷新~OK 完美!
总结
想学好一样东西,需要长久的积累。作为一个前端,一些服务器数据库的知识除了可以帮助我们更好的跟兄弟(后端)交流,对前端来说也是如鱼得水一般的存在。
下一篇文章准备写electron入门,electron是通过js构建桌面应用的框架,。共勉~~~~~
Github:https://github.com/xu455255849/myBlog
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# express搭建服务器
# express创建服务器
# 零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
# Express与NodeJs创建服务器的两种方法
# nodejs express配置自签名https服务器的方法
# node.js的Express服务器基本使用教程
# 上传
# 我们可以
# 可以直接
# 准备工作
# 图片上传
# 的是
# 都是
# 后端
# 有什么
# 如果你
# 文档
# 也就
# 给我们
# 可以通过
# 我用
# 下一
# 如鱼得水
# 此类
# 作为一个
# 还需要
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
教你用AI将一段旋律扩展成一首完整的曲子
Laravel怎么判断请求类型_Laravel Request isMethod用法
大连 网站制作,大连天途有线官网?
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
米侠浏览器网页背景异常怎么办 米侠显示修复
Laravel怎么实现模型属性的自动加密
Laravel怎么使用Intervention Image库处理图片上传和缩放
Laravel如何与Pusher实现实时通信?(WebSocket示例)
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
详解jQuery停止动画——stop()方法的使用
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
如何在阿里云香港服务器快速搭建网站?
详解Android中Activity的四大启动模式实验简述
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
,南京靠谱的征婚网站?
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
Laravel怎么在Blade中安全地输出原始HTML内容
如何在阿里云完成域名注册与建站?
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
Laravel如何发送系统通知?(Notification渠道示例)
使用豆包 AI 辅助进行简单网页 HTML 结构设计
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
如何在服务器上三步完成建站并提升流量?
如何快速搭建虚拟主机网站?新手必看指南
利用python获取某年中每个月的第一天和最后一天
Laravel如何使用Eloquent进行子查询
如何用PHP工具快速搭建高效网站?
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
电商网站制作价格怎么算,网上拍卖流程以及规则?
jQuery validate插件功能与用法详解
Windows10如何更改计算机工作组_Win10系统属性修改Workgroup
Laravel如何为API生成Swagger或OpenAPI文档
JS实现鼠标移上去显示图片或微信二维码
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
如何在万网主机上快速搭建网站?
javascript中的try catch异常捕获机制用法分析
Laravel如何处理和验证JSON类型的数据库字段
如何在腾讯云服务器快速搭建个人网站?
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
Laravel如何优化应用性能?(缓存和优化命令)
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环

