漂流瓶是一种极富浪漫情调的传统玩意儿,它可以随波逐流,飘向远方。在数字化的时代里,我们可以通过技术手段来模拟这种玩具。本文将介绍如何使用node.js来实现一个简单的漂流瓶应用。
第一步:搭建基础环境
首先,我们需要确保计算机上安装了node.js。安装完成后,在命令行中输入以下命令来检测node.js是否安装成功:
node -v
如果成功安装,输出版本号即可。
接着,我们需要安装一些必要的依赖库,包括express框架和mongodb数据库。在命令行中使用以下命令进行安装:
npm install express mongodb --save
这里使用了npm命令来安装依赖库,其中--save参数表示将依赖库的名称和版本号记录在项目的package.json文件中,方便团队协作和代码维护。
第二步:实现后台逻辑
接下来,我们需要编写一些后台逻辑,包括路由和数据操作等。在项目的根目录下新建一个app.js文件,在里面输入以下内容:
const express = require('express');const mongodb = require('mongodb').mongoclient;const app = express();const port = process.env.port || 3000;const dburl = 'mongodb://localhost:27017/bottle';app.get('/', function(req, res) { res.send('hello, world!');});app.listen(port, function() { console.log(`server is listening on port ${port}`);});
这段代码实现了一个最基础的express应用,监听在3000端口上,同时连接到名为bottle的mongodb数据库。还定义了一个根路由/,返回hello, world!。
接下来,我们需要实现三个路由:
/throw :用于投放漂流瓶。/pick :用于寻找漂流瓶。/delete/:id :用于删除漂流瓶。先来看一下如何实现第一个路由。在app.js文件中添加以下代码:
app.get('/throw', function(req, res) { const user = req.query.user; const content = req.query.content; const bottle = {user: user, content: content}; mongodb.connect(dburl, function(err, client) { if (err) { return console.log('failed to connect to database'); } const db = client.db('bottle'); db.collection('bottles').insertone(bottle, function(err, result) { if (err) { return console.log('failed to insert bottle'); } res.send('throw bottle success'); client.close(); }); });});
这段代码用于投放漂流瓶,首先获取query参数中的用户名和内容,然后拼装成一个json对象。接着连接到mongodb数据库,并在bottles集合中插入该对象。如果插入成功,返回throw bottle success。
接下来,我们需要实现第二个路由。在app.js文件中添加以下代码:
app.get('/pick', function(req, res) { const user = req.query.user; mongodb.connect(dburl, function(err, client) { if (err) { return console.log('failed to connect to database'); } const db = client.db('bottle'); db.collection('bottles').findone({user: user}, function(err, result) { if (err) { return console.log('failed to find bottle'); } if (!result) { return res.send('no bottle found'); } const bottle = {user: result.user, content: result.content}; db.collection('bottles').deleteone({_id: result._id}, function(err, result) { if (err) { return console.log('failed to delete bottle'); } res.send(bottle); client.close(); }); }); });});
这段代码用于寻找漂流瓶。首先获取query参数中的用户名,然后连接到mongodb数据库,在bottles集合中查找用户名匹配的漂流瓶。如果找到了一个漂流瓶,将它从数据库中删除,并将结果返回给客户端。
最后,我们需要实现第三个路由。在app.js文件中添加以下代码:
app.get('/delete/:id', function(req, res) { const id = req.params.id; mongodb.connect(dburl, function(err, client) { if (err) { return console.log('failed to connect to database'); } const db = client.db('bottle'); db.collection('bottles').deleteone({_id: mongodb.objectid(id)}, function(err, result) { if (err) { return console.log('failed to delete bottle'); } res.send('delete bottle success'); client.close(); }); });});
这段代码用于删除漂流瓶。首先获取路由参数中的漂流瓶id,然后连接到mongodb数据库,在bottles集合中删除该漂流瓶。如果删除成功,返回delete bottle success。
第三步:实现前端交互
现在,我们已经实现了一个完整的后台逻辑。接下来,我们需要实现一些前端交互。在项目的根目录下新建一个public文件夹,并在里面创建一个index.html文件,然后输入以下代码:
<!doctype html><html><head> <title>drifting bottle</title> <meta charset="utf-8"></head><body> <form id="throwform"> <input type="text" name="user" placeholder="your name"><br> <textarea name="content" placeholder="message"></textarea><br> <input type="submit" value="throw"> </form> <hr> <form id="pickform"> <input type="text" name="user" placeholder="your name"><br> <input type="submit" value="pick"> </form> <hr> <ul id="bottlelist"></ul> <script src="https://code.jquery.com/jquery-3.6.0.slim.min.js"></script> <script> $(function() { $('#throwform').submit(function(event) { event.preventdefault(); const form = $(this); $.get('/throw', form.serialize(), function(data) { alert(data); }); }); $('#pickform').submit(function(event) { event.preventdefault(); const form = $(this); $.get('/pick', form.serialize(), function(data) { if (typeof(data) === 'string') { alert(data); } else { $('#bottlelist').append(`<li>${data.user}: ${data.content}</li>`); } }); }); $('#bottlelist').on('click', 'li', function() { if (confirm('are you sure to delete this bottle?')) { const id = $(this).attr('data-id'); $.get(`/delete/${id}`, function(data) { alert(data); $(this).remove(); }.bind(this)); } }); }); </script></body></html>
这段代码实现了一个简单的用户界面,包括两个表单和一个列表。其中,表单用于提交漂流瓶和寻找漂流瓶,列表用于显示寻找到的漂流瓶。
接下来,在app.js文件中添加以下代码,将静态文件目录设置为public:
app.use(express.static('public'));
最后,在命令行中输入以下命令启动应用:
node app.js
访问http://localhost:3000即可使用漂流瓶应用。
总结
本文介绍了如何使用node.js来实现一个漂流瓶应用。通过实现后台逻辑和前端交互,我们建立了一个基本可用的漂流瓶系统。当然,这只是一个非常简单的漂流瓶应用,还有很多需要完善和优化的地方,比如数据校验、异常处理、安全性等等。但是这个应用足以展示node.js在web应用中的强大能力和优雅编程方式,希望本文能对想要学习node.js的读者有所帮助。
以上就是nodejs实现漂流瓶的详细内容。
