Nodejs实现的公司官网,真正的商业例子,供大家参考

Nodejs实现的公司官网,真正的商业例子,供大家参考

从去年7月份开始做的公司官方网站,

  • 使用了express框架
  • jade模版
  • node-cavans做了验证码
  • 支持makedown的博客
  • 后台jquery文件上传功能
  • 集成了单点登陆功能

用户注册的功能我把它屏蔽了,你们看不到,呵呵.

公司官方网站链接: http://www.bizhisoft.com/

ps: 请同行们手下留情,不要恶意攻击我的网站啊.


53 回复

Nodejs实现的公司官网,真正的商业例子,供大家参考

背景介绍

从去年7月份开始做的公司官方网站,旨在为客户提供一个直观、易用的信息展示平台。通过结合多种技术手段,我们成功地构建了一个高效且安全的网站。

技术栈

  • Express框架:作为后端核心框架,提供了路由、中间件等功能,简化了服务器端开发。
  • Jade模板引擎:用于生成HTML页面,语法简洁明了,提高了开发效率。
  • Node-canvas:用于生成验证码图片,增加了网站的安全性。
  • Markdown支持:允许用户以Markdown格式撰写博客文章,提升了用户体验。
  • jQuery文件上传插件:实现了文件上传功能,方便用户上传资料。
  • 单点登录(SSO)功能:整合了单点登录系统,提升用户的便捷性和安全性。

示例代码

Express框架搭建基础服务
const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
    res.send('欢迎访问BizhiSoft官方网站!');
});

app.listen(port, () => {
    console.log(`应用运行在 http://localhost:${port}`);
});
使用Jade模板引擎渲染首页

首先安装Jade:

npm install jade --save

然后创建一个简单的index.jade文件:

doctype html
html
  head
    title BizhiSoft 官方网站
  body
    h1 欢迎访问BizhiSoft官方网站!

在Express中设置Jade视图引擎:

const jade = require('jade');

app.set('views', './views'); // 设置视图目录
app.set('view engine', 'jade'); // 设置默认模板引擎

app.get('/', (req, res) => {
    res.render('index'); // 渲染index.jade文件
});
验证码功能实现

使用node-canvas库生成验证码图片:

npm install canvas --save
const Canvas = require('canvas');
const captcha = require('captcha');

app.get('/captcha', (req, res) => {
    const { text, base64 } = captcha.createCaptcha(4);
    const canvas = new Canvas(100, 30);
    const ctx = canvas.getContext('2d');
    ctx.font = '20px Arial';
    ctx.fillText(text, 10, 20);

    res.writeHead(200, {
        'Content-Type': 'image/png'
    });
    canvas.createPNG().pipe(res);
});

总结

通过上述技术和代码示例,我们可以看到如何利用Node.js构建一个功能齐全的企业官网。每个组件都有其特定的作用,共同构成了一个完整的Web应用。希望这些示例能帮助大家更好地理解和应用Node.js技术。


其实我还用nodejs做了一个失败的企业应用产品,发现nodejs不适合做逻辑复杂的企业应用,特别是在生成报表的时候,由于nodejs天生的异步调用,导致按逻辑顺序处理多个数据集合是非常头疼,需要用变量来保证函数的执行顺序.这个对编程能力要求很高,不适合团队开发,不过nodejs实现权限控制的功能没有问题的.

我习惯用sublime做nodejs开发,边写代码边查看网站的显示效果,出现bug就用console.log抓一下变量,完全不用其他的开发工具,因为像eclipse这种开发工具都太大,运行太慢了.

呵呵,同音问题,的确会让人想到… 某出名饭店还叫小憩饭店呢

你服务器的22端口没锁。。。建议用iptables锁住,很容易被暴力破解的 :p

我要用ssh远程连服务器啊,锁住22端口怎么连服务器?买的阿里云服务器

nodejs的商业应用就在于做公司官网

yorkie谢了.

不是有promise吗

这个也就是相当于hello world了

啥意思哩,牛烘烘的样子,哥们攻击型的把

我觉得吧 先找个美工挺好的 嘿嘿

有了bootstrap给你们省了很大的力气啊,都不用找设计师了

async 处理异步合并挺好呀。

usherwong眼尖,被你看穿了,呵呵,刚开始是用bootstrap 2,后来升级到bootstrap 3,有兼容问题,要改动的地方还不少,特别是表单那一块。

做这个官方网站总的工作量也不大,我就是一个人利用开发产品的业余时间断断续续改了改,用nodejs开发主要的难点就是要用异步编程的方式去设计程序。还有网站的架构要不断自己摸索改进。不像asp.net那么成熟,不过asp.net框架太死了,做一个http handle模块太麻烦,而nodejs是直接在express框架里的app.use引入一个函数就解决问题了。

eventproxy 试试

用 pubkey ,开22没事

一大早起床发现网站里一篇文章会弹出对话框,原来是评论部分有xxs漏洞,迅速更新网站,直接用简单粗暴的方式转义了html,搞定,上班去。 顺便谢谢某位同行的善意提醒。

不错~好像是用nodejs做了一层前台的宣传,产品还是C/S结构的。没有用Nodejs做一些核心的业务

以前尝试把产品做成BS结构的,做到一半放弃了,一是花的effort有点大,二是没办法做详细的测试,质量不可靠,三是javascript源代码得不到很好的保护,因为最终产品是要给客户的,而nodejs都是动态读取js文件,虽然我也用C++ addon专门写了源代码保护的组件,但是高手还是可以通过修改入口文件或是截获解密后的文本绕过去的,最重要的一点是要用户装nodejs环境和模拟,简直不可能的事情,而我们公司的产品就这点价格,跑去帮客户装linux系统,装软件,卖一套产品的钱还不够来回车费和住宿费用.

用老雷的xss 模块不是挺好的吗…

具体说说你的合并,使用promise无法完成这种类型的工作,我深表怀疑

不是无法完成,而是实现起来比较复杂,稍有不慎,就是死循环,mongodb直接down掉。 例如,航班订阅系统中有两张表,一个是舱单表,记录了所有乘客的航班订单的信息(出发地,目的地),另一张表是关于乘客的详细信息(姓名,所在地区),现在要用nodejs读取mongodb中这两张表的数据,统计出2014年每个季度中,总航班数量大于10次的乘客所在地区的分布情况。

使用 xss 模块:

  • 先安装: npm install xss
  • 在代码中使用:
var xss = require('xss');

// 直接调用xss函数即可 console.log(xss(’<a onclick=“alert(/xss/)”>click me</a>’));

我想说界面好丑

没米,请不起设计师

建议用1920的显示器看看,网站有错误!!!

没有这么高端大气上档次的显示器啊,没办法测了,呜~~

没有用node写过太复杂的逻辑。ebay里的逻辑应该不简单吧,但是node也能应付。尝试用一些流程控制的框架,重构下代码,应该会好很多的。 那一堆}}}}}}}}}}}}}}}}}}}}}}}}}太泯灭人性了。

这颜色。。。。可以看出楼主很用心了,但是还是觉得。。。 色差有点大,风格不固定————个人观点。。。 功能上没看到什么问题,毕竟也不复杂,发展空间还是很广阔的,觉得会受到中小企业的青睐。 支持一下。 最后也忍不住吐槽一下公司名字。。。确实有点亮~~~

忽然想到可以用浏览器的缩放功能模拟不同的分辨率,发现首页的图片没有自动伸展,是不是这个问题,昨晚改好了,你看看这个问题还存在吗?谢谢。

可以问下lz的jquery后台上传图片大致是怎么做的么

前端用 jquery file upload 组件,后台用nodejs实现接口就行了,有开源的组件,不过要修改,集成进自己的框架里面,什么文件都可以传,1G大小的文件都没问题,我现在基本上把它当存储中心。计划将其改造成电子档案中心,呵呵,可以检索,不同的用户有不同的文件夹和权限。。。

同想歪了,捂脸

header.jade里if(req.user != null)这样写会不会有问题呢

写一个中间件含有如下代码,注册到app.use里面

res.locals.req = req

就可以在jade里面使用req了

同意, 顺道说一句, nodejs真的不适合做页面, 做高IO, 低cpu的interface比较合适~~

这个是你从前到后一个人负责的吗?

是啊,嘿嘿

本人在大公司有正式工作,只是利用业余时间搞搞副业,所以开了个小公司,目前光棍司令一个,公司的网站和产品都是我一个人做的,工作快六年了吧,大学时代学的是教育技术专业,自学计算机,考过高级程序员, 曾猛啃C++和算法,毕业设计用UML做了个系统的分析和设计,工作开始用C#,慢慢工作的重心转向 javascript, 业余时间学了linux和数学和Lisp,喜欢使用debian linux. 因公司外派出过一趟国,回国开始思考创业. 目前我写的软件DACAAS是用C#做的,最值得称赞的是自带scheme语言解释器,可惜总感觉使用难度有点高,用户用不来,还有只是单机版,没有数据可视化的功能. 我计划再利用一年时间,将nodejs和node-webkit融入到DACAAS这个产品中,做出超越SPSS的产品,希望有一天中国人也有自己的通用强大的数据分析软件吧,下一代的软件的架构和设计已经在规划中了,细节我就不多说了,等产品做出来再说吧.

美工、网页互动还有提升空间。

总感觉nodejs是用来处理数据的,做展示类型的官网。。有点怪怪的。。

楼主,需要美术和前端不?

真心需要,可是没项目没米啊, 同行们有什么好项目介绍点给我啊, qq: 1036389464

顶这样有实践经验的帖子

怎么打不开?

貌似打不开了~~~

已经挂了

已经挂了。楼主用的mongoose?怎么不populate。。。实践下来感觉mongo的数据结构设计要事先考虑到查询,不然会有点坑。

为什么打不开?

Node.js 实现的公司官网

使用的技术栈:

  • Express 框架: 快速、无约束的 Web 应用开发框架。
  • Jade 模板引擎: 用于生成 HTML 的模板引擎(现在改名为 Pug)。
  • node-canvas: 用于生成验证码。
  • Markdown 支持: 用于博客内容展示。
  • jQuery 文件上传: 后台文件上传功能。
  • 单点登录 (SSO): 用户只需要登录一次即可访问多个应用。

示例代码

Express 框架搭建基本项目结构
const express = require('express');
const path = require('path');
const app = express();

// 设置静态资源目录
app.use(express.static(path.join(__dirname, 'public')));

// 配置视图引擎为 Jade/Pug
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

// 路由定义
app.get('/', (req, res) => {
    res.render('index', { title: 'Home' });
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});
使用 node-canvas 生成验证码
const canvas = require('canvas');
const Canvas = canvas.Canvas;
const Image = canvas.Image;

app.get('/captcha', (req, res) => {
    const captchaText = generateCaptchaText();
    
    // 创建画布并绘制验证码文本
    const img = new Image();
    const canvas = new Canvas(150, 60);
    const ctx = canvas.getContext('2d');

    ctx.font = '30px Arial';
    ctx.fillText(captchaText, 10, 40);

    img.src = canvas.toBuffer();
    res.writeHead(200, {
        'Content-Type': 'image/png',
        'Content-Length': img.src.length
    });
    res.end(img.src);
});

function generateCaptchaText() {
    return Math.random().toString(36).substr(2, 5); // 生成随机字符串
}
Markdown 支持

使用 markedmarkdown-it 库来解析 Markdown 文本。

const marked = require('marked');

app.get('/blog/:id', (req, res) => {
    const markdownContent = readBlogPost(req.params.id);
    const htmlContent = marked(markdownContent);
    res.render('blog', { content: htmlContent });
});
jQuery 文件上传

前端可以使用 jQuery 的 FormData 对象进行文件上传,后端通过 Multer 等库处理文件上传。

const multer = require('multer');
const upload = multer({ dest: 'uploads/' });

app.post('/upload', upload.single('file'), (req, res) => {
    res.send(`File uploaded successfully: ${req.file.originalname}`);
});

单点登录 (SSO)

使用 Passport.js 进行身份验证和会话管理。集成 OAuth、JWT 等方式实现 SSO。

以上是基本的实现思路和技术选型,具体实现细节可以根据实际需求进行调整和扩展。希望这些示例代码能帮助你快速理解如何使用 Node.js 构建一个完整的公司官网。

回到顶部