node.js 表达 mongodb 保存消息?

2024-03-04

我试图看到express、mongoose 和MongoDB 以一种非常简单的方式协同工作。如果我可以有一个盒子,将我的名字放入其中,提交并将其保存到数据库,这就是我所需要的。

我尝试通过一些教程来做到这一点,但我被困住了。我试图通过聊天来完成此操作并保存每条消息。如果你能让我的例子发挥作用,或者有一个你自己的例子,无论哪种方式,它都会帮助我看到一些可行的东西。

然后我就可以为有效的方法打下基础,并可以对其进行补充。我看到了很多教程和其他所有内容,但对人们来说并不是简单的事情,它总是一个你迷失在某个地方的大项目,希望这对其他人也有帮助,它很多,包含所有内容,包含节点及其所有内容朋友们。

在我的例子中,我没有看到任何错误,但可能会有一些错误。我正在数据库聊天中查看使用 db.messages.find() 的消息,但那里没有。

HTML:

<html>
    <head>
        <title>Chat with socket.io and node.js</title>
        <style>
            #chat{
                height:500px;
            }
        </style>
    </head>
    <body>
        <div id="chat"></div>
        <form id="send-message">
            <input size="35" id="message"></input>
            <input type="submit"></input>
        </form>

        <script src="http://code.jquery.com/jquery-latest.min.js"></script>
        <script src="/socket.io/socket.io.js"></script>
        <script>
            jQuery(function($){
                var socket = io.connect();
                var $messageForm = $('#send-message');
                var $messageBox = $('#message');
                var $chat = $('#chat');
       
                $messageForm.submit(function(e){
                    e.preventDefault();
                    socket.emit('send message', $messageBox.val());
                    $messageBox.val('');
                });
       
                socket.on('new message', function(data){
                    $chat.append(data + "<br/>");
                });
            });

            var chatSchema = mongoose.Schema({
                msg: String,
                created: {type: Date, default: Date.now}
            });

            var Chat = mongoose.model('Message', chatSchema);

            var newMsg = new Chat({msg: msg});
            newMsg.save(function(err){
                if(err) throw err;
            });               


        </script>
    </body>
</html>

服务器.js

var mongoose = require('mongoose')
var express = require('express'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server);

server.listen(3000);

app.get('/', function(req, res){
    res.sendfile(__dirname + '/index.html');
});

io.sockets.on('connection', function(socket){
    socket.on('send message', function(data){
        io.sockets.emit('new message', data);
    });
});

mongoose.connect('mongodb://localhost/chat', function(err){
    if(err){
        console.log(err);
    } else{
        console.log('Connected to mongodb!');
    }
});

我已经尝试过了,下面的修改版本可以工作!主要的变化是将 mongoose schema 代码放在服务器端,并且仅在成功保存到 Mongo 数据库后才在服务器上回显文本框的内容。

另请参阅mean.io http://mean.io网站介绍 MEAN 堆栈,如果您对代码有疑问,请告诉我。

修改后的server.js:

var mongoose = require('mongoose')
var express = require('express'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server);

server.listen(3000);

app.get('/', function(req, res){
    res.sendfile(__dirname + '/test.html');
});

io.sockets.on('connection', function(socket){
    socket.on('send message', function(data){

        var newMsg = new Chat({msg: '' + data});

        console.log('saving newMsg: ' + newMsg);

        newMsg.save(function(err){
            console.log('saved, err = ' + err);
            if(err) throw err;
            console.log('echoeing back data =' + data);
            io.sockets.emit('new message', data);
        });

    });
});

var chatSchema = mongoose.Schema({
    msg: String,
    created: {type: Date, default: Date.now}
});

var Chat = mongoose.model('Message', chatSchema);



mongoose.connect('mongodb://localhost/test', function(err){
if(err){
console.log(err);
} else{
    console.log('Connected to mongodb!');
}
});

这是 html 页面:

<html>
    <head>
        <title>Chat with socket.io and node.js</title>
        <style>
            #chat{
                height:500px;
            }
        </style>
    </head>
    <body>
        <div id="chat"></div>

        <form id="send-message">
            <input size="35" id="message"></input>
            <input type="submit"></input>
        </form>

        <script src="http://code.jquery.com/jquery-latest.min.js"></script>
        <script src="/socket.io/socket.io.js"></script>

        <script>
            jQuery(function($){
                var socket = io.connect();
                var $messageForm = $('#send-message');
                var $messageBox = $('#message');
                var $chat = $('#chat');

                $messageForm.submit(function(e){
                    e.preventDefault();
                    socket.emit('send message', $messageBox.val());
                    $messageBox.val('');
                });

                socket.on('new message', function(data){
                    console.log('Received data: ' + data);
                    $chat.append(data + "<br/>");
                });
            });

        </script>

    </body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

node.js 表达 mongodb 保存消息? 的相关文章

  • NodeJS 在目录中递归地哈希文件

    我能够实现目录中的递归文件遍历 即探索目录中的所有子目录和文件 为此我使用了answer https stackoverflow com questions 5827612 node js fs readdir recursive dire
  • 在 WSL Ubuntu 20.04 上安装 npm 后,我收到消息“/usr/bin/env: ‘bash\r’: No such file or directory”

    运行时我看到以下消息npm install or npm来自终端的命令 执行中node按预期工作 gt npm install usr bin env bash r No such file or directory 2023 年 7 月更
  • Node.js 中没有请求状态 Morgan Logging

    我正在 Azure VM 上运行 node js 应用程序 使用 PM2 处理负载平衡和重新启动 这是服务器设置和日志记录代码 var logger require morgan var app express app set views
  • npm install 的 --save 选项是什么?

    我看到一些教程 其中命令是 npm install save 什么是 save选项是什么意思 更新 npm 5 As of npm 5 0 0 http blog npmjs org post 161081169345 v500 安装的模块
  • lessc:未找到命令

    我使用的是 OS X 8 并且是 Node LESS 的新手 我以为我之前安装了 lessc 当我转到 usr local bin 时 我看到了 lessc 但对于我的生活来说 我无法运行它 每当我运行它时 我都会看到 bash lessc
  • keystonejs 模型中的动态类型选择

    我想在 adminUI 中使用一个组合框 其中包含来自 Web 服务的字段 我正在考虑使用预 查找 挂钩获取数据 然后覆盖模式中 受众 属性的选项属性 Schema Compliance add title type Types Text
  • 如何从 Node.js 中的 Http.IncomingMessage 检测 http 与 https

    给定一个Http IncomingMessage由一个创建http s Server为了响应请求 检测请求是否是 http 与 https 的正确 推荐方法是什么 一些我不知道的随机想法是否正确 检查端口 seems wrong might
  • node-mongodb-native的插入性能

    我正在使用 MongoDB 测试 Node js 的性能 我知道其中每一个都很好 彼此独立 但我正在尝试一些测试来感受它们 我遇到了这个问题 但无法确定来源 问题 我正在尝试在单个 Node js 程序中插入 1 000 000 条记录 它
  • 如何调试 Node.js 应用程序?

    如何调试 Node js 服务器应用程序 现在我主要使用警报调试打印语句如下 sys puts sys inspect someVariable 一定有更好的调试方法 我知道谷歌浏览器 http en wikipedia org wiki
  • 使用 mosca MQTT 的请求响应模式

    有没有办法使用 mosca MQTT 实现请求响应模式 以 检查客户端的回复 如果在预期时间内未收到预期回复 则重新发布 我相信这在 Mqtt 5 中是可能的 但截至目前 我必须使用 QoS 1 的 Mosca 代理 支持直到 Mqtt 3
  • 如何在yarn中指定本地注册表?

    我有一个本地 Nexus 服务器 基本上我希望在上线之前先查看一下它prefer offline yarn install prefer offline cache folder C folder yarn cache preferred
  • Google API、drive.files.list 和仅返回子文件

    我正在使用 谷歌API https www npmjs com package googleapis NodeJS 中的库 我试图返回当前指定文件夹中的文件和文件夹列表 但我发现drive files list返回用户已被授予读取权限的所有
  • 获取telegram群组的所有用户

    我正在尝试获取电报组的所有用户 我看到方法 getChatAdministrators 但我认为 API 没有获取所有成员的方法 我正在使用nodejs的telegram bot api Telegram 机器人 API https cor
  • AJAX 发送数据到 Node.js 服务器

    我尝试使用 AJAX 将数据发送到 Node js 服务器 但不断遇到同样的问题 即接收问题 这是客户端 JavaScript AJAX 代码 var objects function return new XMLHttpRequest f
  • Laravel Homestead 中 npm 安装错误有解决方案吗?

    Windows 10 家园 虚拟盒6 0 8 流浪者2 2 5 节点 v12 5 0 npm v6 10 1 我想做的就是在新安装的 Laravel 应用程序中执行 npm install 命令 但我不断收到错误 经过两天的谷歌搜索并尝试了
  • 在生产中使用 babel-node 可以吗

    我一直在使用 babel node 和 browserify 以及 babelify 转换来开发一个网站 以支持 ES6 语法 我只是想知道 我可以在生产中运行它吗 babel node server 而不是 node server 要在
  • AWS Lambda 提前结束(没有任何显式返回或回调)

    我在放入 AWS Lambda 中的一些 Node js 代码时遇到了一些问题 我需要进行几个异步调用 虽然第一个调用的行为符合我的预期 但 lambda 函数在第二个调用完成之前终止 返回值为 null 这让我认为 lambda 正在执行
  • Sails.js - 如何更新嵌套模型

    attributes username type email validated by the ORM required true password type string required true profile firstname s
  • Node.js:server.setTimeout、server.timeout 和 server.keepAliveTimeout 之间有什么区别

    官方文档是here https nodejs org api http html http server settimeout msecs callback server setTimeout 中没有提及有关服务下一个请求的信息 所以我认为
  • 无法使用 webpack 加载 Node 原生插件

    虽然我正在使用vue cli在生成 webpack 配置的示例代码中 没有任何特定于 vue 的内容 我像这样创建示例应用程序 vue init webpack webpack modules example 生成webpack base

随机推荐

  • Python 属性描述符设计:为什么要复制而不是变异?

    我正在研究Python如何实现属性描述符 https docs python org 2 howto descriptor html properties内部 根据文档property 是根据描述符协议实现的 为了方便起见 在此处复制它 c
  • Qt - webkit - 如何以编程方式登录

    我正在制作一个网络爬虫 因为我需要以编程方式登录我的电子邮件帐户 谁能说一下如何实现这一目标 我认为 QNetworkAccesManager 和它的 get 可以做到这一点 但是 我不太清楚 请有人阐明这个问题 注意 我使用的是 Qt 4
  • 使用查询字符串参数消除 UriTemplate 匹配的歧义

    我正在使用 WCF 4 0 创建 REST ful Web 服务 我想做的是根据查询字符串参数调用不同的服务方法UriTemplate 例如 我有一个 API 允许用户使用驾驶执照或社会安全号码作为密钥来检索有关人员的信息 在我的Servi
  • 如何从用户计算机加载图像

    是否可以从用户计算机将图像加载到 XNA 游戏 例如 我想将 C Images Box png 加载到精灵纹理 是否可以 如果是 怎么办 在XNA 4 0中使用Texture2D FromStream http msdn microsoft
  • 使用 IIS 调试 ASP.NET

    我已经在 Visual Studio 2008 中将调试设置为 IIS 而不是内置服务器 这样我就可以在开发时运行 url 重写 使用 IIRF 花了一段时间才开始工作 更改权限 重新安装 NET 框架 但它正在工作 我关闭了机器 现在它重
  • 将 ClassPathScanningCandidateComponentProvider 与多个 jar 文件一起使用?

    我正在考虑使用 ClassPathScanningCandidateComponentProvider 在 JVM 中查找特定类的子类 我正在做的事情几乎完全按照这里描述的进行 在运行时扫描Java注释 https stackoverflo
  • Android 中双 SIM 卡设备的手机号码验证

    我已经在我的应用程序中完成了 SIM 手机号码验证 与 Whats APP 相同 部分 就像是 发送消息部分 SmsManager sm SmsManager getDefault sm sendTextMessage mobileNumb
  • 在sql server表中存储标签的最佳方式?

    存储记录标签的最佳方式是什么 只使用 varchar 字段 当选择包含标签 x 的行时怎么样 使用like运算符 thanks 取决于两件事 1 标签 标记记录的数量2 无论你是否对正常化有宗教观点 除非处理大量数据 否则我建议使用一个 标
  • 如何替换 ajax 加载的 html 文档上的元标题、关键字和描述?

    如何用 ajax 调用中传入的 html 文档中的元标题和描述替换文档上的元标题和描述 我正在从相邻 html 文档上的 content div 调用新内容 我想要发生的是 当新内容加载时 我想用正在加载的 html 文件中的元标题替换主文
  • 优化 ORDER BY 查询

    我不知所措 我有一个大约有 100K 行的表 查询该表时 结果通常很快 大约 2 毫秒左右 但每当我使用 ORDER BY 时 性能就会急剧下降到 120 毫秒左右 我读了MySQL ORDER BY 优化 http dev mysql c
  • .Dispose a StreamWriter 是否会关闭底层流?

    StreamWriter Close 表示它还会关闭 StreamWriter 的底层流 StreamWriter Dispose 怎么样 Dispose 是否也会处理和 或关闭底层流 StreamWriter Close 只是打电话Str
  • 基于数据帧名称中的通用模式 rbind 数据帧

    假设我有多个数据帧 它们都具有相同的向量名称 并且我想绑定所有具有共同模式的数据帧 所以对于这 3 个数据框 df 1 lt data frame column1 factor sample c Male Female 10 replace
  • 从 JavaScript Ajax 调用者调用 PHP 函数

    我需要对 php 类中的 php 函数进行 ajax 调用 文件夹是这样的 controllers folder User php php file View folder js folder myjavascriptfile js 里面m
  • 如何在tvOS上显示GameCenter排行榜?

    I think我按照所有必需的步骤在我的游戏中支持排行榜 它们在 iOS 上运行得很好 但是在 tvOS 上无法配置GKGameCenterViewController要显示特定的排行榜 LeaderboardIdentifier属性只是丢
  • 使用 React Native 和 API 后端进行身份验证

    我正在尝试使用 React Native 应用程序和单独的 NodeJS Express API 后端来理解 oauth 我明白https github com adamjmcgrath react native simple auth h
  • 什么是 -[NSURL _fastCharacterContents]:?

    所以我在一个方法中调用它 id initWithContentURL NSString url if self super init NSLog xSheetMusicViewController url Casting an NSStri
  • 如何在 KonvaJs 中获得三个碰撞形状的交集并删除不碰撞的部分?

    如果给我 3 个圆圈 它们被定位为原色圆圈 https i stack imgur com l2ie2 png 3个圆圈彼此相交 是否有一个功能可以帮助我删除不与任何东西碰撞的部分并只保留相交的部分 另一个例子可以绘制三条线 使其形成一个三
  • andengine 中的 TimerHandler 按一定时间间隔生成精灵

    我在 andEngine 中使用这个 TimerHandler 在特定时间生成精灵 mScene registerUpdateHandler new TimerHandler 0 02f true new ITimerCallback Ov
  • 跟踪文件导入数据库

    我需要使用以下 Java 代码测试文件导入状态 EventListener public void handleContextStart ContextRefreshedEvent eventd throws IOException Int
  • node.js 表达 mongodb 保存消息?

    我试图看到express mongoose 和MongoDB 以一种非常简单的方式协同工作 如果我可以有一个盒子 将我的名字放入其中 提交并将其保存到数据库 这就是我所需要的 我尝试通过一些教程来做到这一点 但我被困住了 我试图通过聊天来完