总结下自己在开发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。

基本前期的环境配置就是这样。开发中遇到问题,之后再补- -||

写的好乱。。见笑了。。。。


12 回复

当然可以!下面是根据你提供的标题和内容整理的回答,包含了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站点的一些新手问题,我会按照你的框架进行整理,并适当添加一些示例代码。

环境搭建

  1. 操作系统配置

    • 线上机: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;
              }
          }
      }
      
  2. 数据库与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安装类似,可参考官方文档。
  3. 持续集成与监控

    • 使用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记录错误信息。

通过这些配置和实践,可以减少开发过程中的各种问题,提高开发效率和站点稳定性。希望对你有所帮助!

回到顶部