CNode

急!!如何用nodejs开发一个图片分享网站

问答
SStarkRy发布于12 年前最后回复12 年前20 回复9500 浏览0 收藏

想用nodejs开发一个图片分享网站,功能基本如下: 1.用户注册、登录、注册时能进行邮箱或手机验证绑定; 2.用户可以上传图片,上传图片时并配有文字说明,所有上传的图片都在首页显示; 3.用户可以在首页对上传的图片发表评论,点赞,转发,可以关闭不喜欢的图片; 4.用户可以关注其他用户而不需要得到许可; 5.首页显示的图片按更新时间进行排序,最新发表的在最上面,如果是关注的人发表的图片则优先显示; 6.还有一个热门页面,里面的图片按照评论的数量和点赞的数量从多到少进行排序; 功能大体这样,请问该如何开发,谁能给个思路,小弟谢过了,如果能有愿意一起开发的那就更好了。

查看回复

回复 (20)

T
think2011#1·12 年前
引用 StarkRy@think2011 呃,话说该怎么格式化代码。。。还有listen 8000这不是服务器启动监听的端口么,改成300也不行, 直接截图吧,

@StarkRy

var http = require("http");
var fs = require("fs");
var mime = require("mime");
var path = require("path");
var cache = {};

//返回404页面
function send404(res) {
	res.writeHead(404, {
		"Content - Type": "text / plain"
	});
	res.write("Error 404: 页面丢了");
	res.end();
}
//提供文件数据服务,这个函数先写出正确的HTTP头,然后发送文件的内容。
function sendFile(res, filePath, fileContents) {
	res.writeHead(200, {
		"Content-Type": mime.lookup(path.basename(filePath))
	});


	/**
	 * 楼主!你忘记输出了!!
	 */
	res.write(fileContents);
	res.end();
}

function serveStatic(res, cache, absPath) {
	//检查文件是否缓存在内存
	if (cache[absPath]) {
		sendFile(res, absPath, cache[absPath]);

	} else {
		//检查文件是否存在
		fs.exists(absPath, function(exists) {
			//如果存在,从硬盘读取
			if (exists) {
				fs.readFile(absPath, function(err, data) {
					if (err) {
						send404(res);
					} else {
						cache[absPath] = data;
						sendFile(res, absPath, data);
					}
				});
			} else {
				send404(res);
			}
		});
	}
}
//创建Http服务器逻辑
var server = http.createServer(function(req, res) {
	var filePath = null;

	if (req.url == "/") {
		filePath = "public/index.html";
	} else {
		filePath = "public" + req.url;
	}

	var absPath = "./" + filePath;
	serveStatic(res, cache, absPath);
}).listen(3000, function() {
	console.log("服务器成功启动!!");
});
S
StarkRy#3·12 年前
引用 think2011@StarkRy

@think2011 谢谢哦,确实是这的问题。

T
think2011#6·12 年前
引用 alsotang@think2011 准备离职?去哪里?发封简历来啊

@alsotang (⊙o⊙)哦,真的嘛,我做了一份简历原型。

T
think2011#7·12 年前
引用 think2011@alsotang (⊙o⊙)哦,真的嘛,我做了一份简历原型。

@think2011 今晚我会发到你的邮箱,大概8点左右。

S
StarkRy#8·12 年前
引用 alsotang@StarkRy 下次发代码记得要标记

@alsotang 问下怎么标记。。。

S
StarkRy#9·12 年前
引用 think2011@think2011 今晚我会发到你的邮箱,大概8点左右。

@think2011 汗……我这怎么成招聘市场了,哈哈。对了,顺便问下,国内有能部署nodejs开发网站的服务商么,还是说只能部署到国外的网站上?

T
think2011#11·12 年前

帮楼主理一下好了,以MVC的模式。

M: * 用户数据 * 图片数据

C: * 注册 * 登录 * 上传 * 评论 * 点赞 * 转发 * 关闭 * 关注 * 排序

V: * 用户信息管理 * 用户图片管理 * 图片展示(可包含图片详细信息) * 热门图片

大概理了一下,楼主可以自己做个todolist,然后一个一个实现吧,我最近准备离职,虽然想帮忙,但是没有时间。
I
inosqlorg#12·12 年前

我最近也在考虑做图片的

S
StarkRy#14·12 年前
引用 inosqlorg我最近也在考虑做图片的

@inosqlorg 要不一起啊,我是新手,向你们学习。

S
StarkRy#15·12 年前
引用 think2011帮楼主理一下好了,以MVC的模式。 M: 用户数据 图片数据 C: 注册 登录 上传 评论 点赞 转发 关闭 关注 排序 V: 用户信息管理 用户图片管理 图片展示(可包含图片详细信息) 热门...

@think2011 对了,请问你知道为什么我在webstorm中写了一个nodejs程序,添加了一个index.html文件,这个文件如果 用webstorm能打开正常显示,但是运行nodejs后,打开127.0.0.1:3000后就显示一片空白,检查好几遍都找不着原因,下面是代码 Server.js代码 var http=require('http'); var fs = require('fs'); var mime = require('mime'); var path =require('path'); var cache={}; //返回404页面 function send404(res){ res.writeHead(404,{'Content-Type':'text/plain'}); res.write('Error 404 :页面丢了'); res.end(); } //提供文件数据服务,这个函数先写出正确的HTTP头,然后发送文件的内容。 function sendFile(res,filePath,fileContents){ res.writeHead(200,{'Content-Type':mime.lookup(path.basename(filePath))}); res.end(); } /提供静态文件服务,聊天程序就要把静态文件缓存到内存中,只有第一次访问的时候才会从文件系统中 读取。下一个辅助函数会确定文件是否缓存了,如果是,就返回它。如果文件还没被缓存,它会 从硬盘中读取并返回它。如果文件不存在,则返回一个HTTP 404错误作为响应。/ function serveStatic(res,cache,absPath){ //检查文件是否缓存在内存 if(cache[absPath]){ sendFile(res,absPath,cache[absPath]); } else{ //检查文件是否存在 fs.exists(absPath,function(exists){ //如果存在,从硬盘读取 if(exists){ fs.readFile(absPath,function(err,data){ if(err){ send404(res); } else{ cache[absPath]=data; sendFile(res,absPath,data); } }); } else{ send404(res); } }); } } //创建Http服务器逻辑 var server = http.createServer(function(req,res){ var filePath = null; if(req.url=='/'){ filePath='public/index.html'; } else{ filePath='public'+req.url; } var absPath='./'+filePath; serveStatic(res,cache,absPath); }).listen(8000,function(){ console.log('服务器成功启动!!'); });

index.html代码

I
inosqlorg#16·12 年前
引用 StarkRy@inosqlorg 要不一起啊,我是新手,向你们学习。

@StarkRy 我也是新手。有兴趣加入群讨论么 346315163

T
think2011#17·12 年前
引用 StarkRy@think2011 对了,请问你知道为什么我在webstorm中写了一个nodejs程序,添加了一个index.html文件,这个文件如果 用webstorm能打开正常显示,但是运行node...

@StarkRy 用markdown格式化一下代码吧,太难阅读代码了,没有细看,不过看见你最后写的 listen 8000,会不会是这个原因?

S
StarkRy#18·12 年前
引用 think2011@StarkRy 用markdown格式化一下代码吧,太难阅读代码了,没有细看,不过看见你最后写的 listen 8000,会不会是这个原因?

@think2011 呃,话说该怎么格式化代码。。。还有listen 8000这不是服务器启动监听的端口么,改成300也不行, 直接截图吧, 12.png 13.png 14.png 15.png 16.png

C
cwallow#19·12 年前

我这边测试是你sendFile的函数有问题,在sendFile中的res.end();前面加上res.write(fileContents);你之前并没有把文件内容响应给客户端

S
StarkRy#20·12 年前
引用 think2011@StarkRy 国内不知道,我会部署在heroku

@think2011 哦,我看了下介绍说,heroku的数据库只有5M大小。。

参与回复
登录后即可参与回复。登录