javascript - 无法将表单数据提取到 mongoDB

标签 javascript node.js mongodb express

这是我的 app.js:

var express = require("express"),
mongo = require("mongodb"),
db = require("monk")("localhost:27017/nodemails"),
bodyParser = require("body-parser"),
logger = require("morgan"),
path = require("path");

var app = express();
var router = express.Router();
var port = 3000;
app.use(router);

app.use(express.static(__dirname, "public"));
app.use(logger("dev"));
router.use(bodyParser.urlencoded({extended: true}));
router.use(bodyParser.json());

// Connect my DB here
app.use(function (req,res,next) {
    req.db = db;
    next();
});

// Catch 404 error
app.use(function (req,res,next) {
    var err = new Error("Not found");
    err.status = 404;
    next(err);
});

// Development error handler
if (app.get("env") === "development") {
    app.use(function (err,req,res,next) {
        res.status(err.status || 500);
        res.json({
            message: err.message,
            error: err
        });
    });
}

// Production error handler: no stacktraces
app.use(function (err,req,res,next) {
    res.status (err.status || 500);
    res.json({
        message: err.message,
        error : {}
    });
});

router.all("/", function (req,res,next) {
    console.log("Visit registered");
    next();
});

// Join homepage
router.get("/", function (req,res) {
    res.sendFile(path.join(__dirname, "public", "collection.html"));
});

// Upload email to DB
router.post("/addMail", function (req,res) {
    var db = req.db;
    var userEmail = req.body.useremail;
    console.log(req.body.useremail);
    var collection = db.get("usercollection");

    collection.insert({"email": userEmail}, function (err,doc) {
        if (err) {
            res.send("Somehow it is error, bruh");
        } else {
            res.redirect(__dirname, "public", "/thankyou.html");
        }
    });
});

app.listen(port);
module.exports = app;

这是我的 html 文件,格式为:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form id="mailForm" action="/addMail" method="post">
    <div>
        <label for="useremail">Email: </label>
        <input type="text" id="useremail" name="useremail"> </input>
    </div>
    <input type="submit" value="Submit"> </input>
</form>
</body>
</html>

我解决了 req.body 未定义的问题(将 app.post 和 app.get 替换为 router.get 和 router.post)。但是,现在,错误消息是(当我填写表单并单击提交按钮时):

{"message":"Cannot read property 'get' of undefined","error":{}}

帮我解决这个问题,由于我缺乏专业知识,我确信这个错误很愚蠢。

P.S:这是我在 package.json 文件中的依赖项:

"dependencies": {
"body-parser": "~1.10.2",
"express": "~4.11.1",
"mongodb": "*",
"monk": "*",
"morgan": "*"
}

P.S.S:mongoDB 已经设置并正在运行。

最佳答案

那是因为您将 db 定义为

var db = req.db;

这是未定义的

db 是数据库的实例,仅注释该行,因为最初 已经定义:

db = require("monk")("localhost:27017/nodemails"),

更多信息:

https://github.com/Automattic/monk

关于javascript - 无法将表单数据提取到 mongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44737293/

相关文章:

python - ConfigurationError : Server at 127. 0.0.1 :27017 reports wire version 0, 但是这个版本的 PyMongo 至少需要 2 个(MongoDB 2.6)

javascript - 如何检测/选择从 JavaScript/JQuery 创建的元素?

javascript - 从 m/d/Y H :I:s 创建 JavaScript 日期对象

javascript - 并排显示两列javascript

javascript - NodeJS 异步数据库获取服务器卡住

node.js - FFmpeg 淡出音频过滤器(淡出)没有被应用于迭代地剪辑的轨道

mongodb - AppSync 中的 S3Object GraphQL 类型与 Lambda 数据源?

Javascript 子字符串搜索

node.js - nodejs,启动可执行文件并退出 Node 进程

Mongodb:从数组中查找和更新对象属性