总结下自己在开发Nodejs web站点的一些新手问题。
总结下自己在开发Nodejs web站点的一些新手问题。
主要分为几点。
一个是环境的搭建过程中的困难。
一个是编码的时候一些遇到的不舒服的地方。
还有项目的发布和维护之类的东东。毕竟 作为一个 纯前端,很多后端服务器的知识我都弱爆了。
更希望抛砖引玉的得到大牛的建议。
恩,先挖个坑~ 慢慢更新。
先说环境的一些问题,我的开发过程比较古怪,前期是在vps上直接写的代码,后来代码写的复杂了,部署困难了,又在本地搞的测试环境。【血的教训,还是本地要有一套和线上一样的环境为妙】
首先介绍下自己的开发环境:
线上机 centos 本机 ubuntu
然后用node做网站一般前端都是会顶起一个nginx来做端口代理。比如node会在本机的3000端口起个服务,然后用nginx来设置public目录和代理端口,应该大家都是这么干的。
nginx我是自己手动编译的,因为需要在configure上增加一些add-module的配置,所以ubuntu和centos都是同样的配置方法。【我加了淘宝的concat模块】
之后数据库环境和session选择的是mongodb和redis,想想也知道了,程序是用expressjs写的,所以直接用的套件。
安装mongdb我是从官方的download里一步一步装好的,配合google下如何设置开机启动,和定时备份的方法配置了下,主要是crontab定时走一个自己工程help.sh的shell完成一些工作。后期会说都是啥。
redis的配置安装同理,官方有详细安装步骤和配置方法。
基本的开发环境就这样。然后npm装好forever工具,来保持程序稳定。再定时的restart,基本一天一次,重启node进程,防止内存溢出。
处理图片的话,安装的是node-canvas和imagemagick两个工具,都需要依赖本机系统的工具,不同系统安装方法也不一样,我配置的时候也是分别配置了2次。github上都有wiki可以参考。
然后如果需要收发邮件,需要本机再装sendmail,一般都自带,我的测试机,没配置,只有线上机配置了,配合的模块有个nodemailer?貌似叫这个。。忘了。
前端我用bootstrap加seajs。后端就是expressjs,然后自己分一下m层还有c层,我的ep用的是2.x,没用3.x。
基本前期的环境配置就是这样。开发中遇到问题,之后再补- -||
写的好乱。。见笑了。。。。
当然可以!下面是根据你提供的标题和内容整理的回答,包含了Node.js开发Web站点时可能会遇到的一些新手问题以及解决方案。
总结下自己在开发Node.js Web站点的一些新手问题
1. 环境搭建过程中的困难
问题描述:
- 开发环境与生产环境不一致,导致代码在本地运行正常但在生产环境中出现问题。
- 各种依赖库的安装和配置复杂,特别是在不同的操作系统上。
解决方案:
- 使用Docker容器化你的应用,确保开发环境和生产环境一致。
- 使用版本管理工具(如
nvm
)管理Node.js版本,避免版本冲突。
# 安装Docker
sudo apt-get install docker.io
# 创建Dockerfile
FROM node:14
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]
2. 编码时遇到的不舒服的地方
问题描述:
- 初学者可能对异步编程理解不深,导致回调地狱。
- 路由和中间件的使用不够灵活。
解决方案:
- 使用Promise或async/await简化异步代码。
- 使用Express框架的路由和中间件功能。
// 使用async/await简化异步代码
const asyncHandler = require('express-async-handler');
app.get('/example', asyncHandler(async (req, res) => {
const data = await fetchData();
res.json(data);
}));
3. 项目发布和维护
问题描述:
- 部署过程中可能遇到各种问题,如数据库连接、静态文件路径等。
- 管理长期运行的应用程序,如监控内存使用情况。
解决方案:
- 使用PM2等进程管理器保持Node.js应用稳定运行。
- 设置定时任务自动重启应用,防止内存溢出。
# 安装PM2
npm install pm2 -g
# 使用PM2启动应用
pm2 start app.js --name my-app
4. 数据库和Session管理
问题描述:
- 初学者可能对MongoDB和Redis的配置不够熟悉。
解决方案:
- 参考官方文档进行配置。
- 使用Express的中间件简化操作。
// MongoDB配置
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/mydb', { useNewUrlParser: true, useUnifiedTopology: true });
// Redis配置
const redis = require('redis');
const client = redis.createClient();
5. 处理图片和其他资源
问题描述:
- 图片处理和优化可能比较复杂。
解决方案:
- 使用ImageMagick和node-canvas等工具。
# 安装ImageMagick
sudo apt-get install imagemagick
# 安装node-canvas
npm install canvas
6. 邮件发送
问题描述:
- 发送邮件可能涉及复杂的配置。
解决方案:
- 使用Nodemailer模块。
const nodemailer = require('nodemailer');
let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'your-email@gmail.com',
pass: 'your-password'
}
});
let mailOptions = {
from: 'your-email@gmail.com',
to: 'recipient-email@example.com',
subject: 'Hello',
text: 'Hello world!'
};
transporter.sendMail(mailOptions, function(error, info){
if (error) {
console.log(error);
} else {
console.log('Email sent: ' + info.response);
}
});
以上是我在开发Node.js Web站点时遇到的一些新手问题及解决方案。希望这些内容能对你有所帮助。
比较想知道的是用的什么vps,还有线上部署的
多总结总结~ 写得漂亮些 谢谢 支持支持
实在,写得很好!
没玩过ubuntu,看后面的东西学习了
是否配合过微软或亚马逊的云环境测试?
一天一次重启进程node进程防止内存溢出!无敌了……
一天一次重启进程node进程防止内存溢出! 这样不太好吧,如果真有内存溢出,那是天大的事,应该要问题暴露出来,然后处理掉,而不是每天重启一次掩盖掉内存可能会泄露的事实,要争取一辈子都不用重启
机器不好,没法用ubunto,我也想用linux开发啊
问题已经发现了是convert程序处理大图片的时候就会内存溢出。是convert进程的问题。不过也没什么好办法。毕竟图片处理就是吃内存的操作,内存又有限。没办法,做图片服务就是烧钱的事。。
我觉得机器不好才用ubuntu。windows多卡啊。
总结下自己在开发Node.js Web站点的一些新手问题,我会按照你的框架进行整理,并适当添加一些示例代码。
环境搭建
-
操作系统配置:
- 线上机:CentOS
- 本机:Ubuntu
- 示例配置Nginx(使用淘宝的concat模块):
sudo apt-get install nginx cd /etc/nginx sudo nano nginx.conf # 在http块里添加: http { ... gzip on; gzip_types text/plain application/javascript application/json; ... server { listen 80; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; } } }
-
数据库与Session管理:
- 使用MongoDB和Redis
- 安装MongoDB并设置开机启动:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list sudo apt-get update sudo apt-get install -y mongodb-org sudo systemctl enable mongod
- Redis安装类似,可参考官方文档。
-
持续集成与监控:
- 使用
forever
保持程序稳定:npm install forever -g forever start app.js
- 使用
编码过程
-
框架选择:
- 使用Express.js,版本2.x
- 示例代码:
const express = require('express'); const app = express(); const port = 3000; app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log(`App listening at http://localhost:${port}`); });
-
前端与后端分离:
- 使用Bootstrap和Seajs进行前端开发
- 后端逻辑按MVC模式拆分
项目发布与维护
-
自动重启机制:
- 使用
forever
定时重启Node进程,避免内存泄漏。
- 使用
-
日志管理:
- 使用日志库如
winston
记录错误信息。
- 使用日志库如
通过这些配置和实践,可以减少开发过程中的各种问题,提高开发效率和站点稳定性。希望对你有所帮助!