急!!如何用nodejs开发一个图片分享网站
发布于 3个月前 作者 StarkRy 1527 次浏览 来自 问答

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

20 回复

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

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

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

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

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

我最近也在考虑做图片的

@think2011 嗯,至少让我理清了思路,要是能帮忙就更好了,哈哈,谢谢你啊。

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

@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代码

<!DOCTYPE html> <html> <head > <meta charset="UTF-8"> <title>Chat</title> <link rel="stylesheet" href="stylesheets/style.css"/> </head> <body>
<form id="send-form"> <label for="send-message">发送消息</label> <input id="send-message" /> <input id="send-button" type="submit" value="Send"/>
Chat commands:
  • Change nickname:/nick[username]
  • Join/create room:/join[room name]
</form>
<script src="/socket.io/socket.io.js" type="text/javascript"></script> <script src="http://code.jquery.com/jquery-1.8.0.min.js" type="text/javascript"></script> <script src="/javascripts/chat.js" type="text/javascript"></script> <script src="javascripts/chat_ui.js" type="text/javascript"></script> </body> </html>

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

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

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

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

@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("服务器成功启动!!");
});

@cwallow 确实是哇,谢谢你了,,找了半天都没找到。。。

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

@think2011 准备离职?去哪里?发封简历来啊

@StarkRy 下次发代码记得要标记

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

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

@alsotang 问下怎么标记。。。

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

@StarkRy 国内不知道,我会部署在heroku

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

回到顶部