Вот мой 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":{}}
Помогите мне в этом, я уверен, что ошибка глупа из-за моего отсутствия опыта.
PS: Вот мои зависимости в файле package.json:
"dependencies": {
"body-parser": "~1.10.2",
"express": "~4.11.1",
"mongodb": "*",
"monk": "*",
"morgan": "*"
}
PSS: mongoDB уже настроен и работает.
Это потому, что вы определяете db
как
var db = req.db;
и это не определено
db
- это экземпляр базы данных, только комментарий этой строки, потому что изначально уже определено:
db = require("monk")("localhost:27017/nodemails"),
Дополнительная информация:
res.redirect('/Thankyou.html');