html - 如何使用 node.JS 将数据 POST 到 MongoDB 数据库?

标签 html node.js mongodb forms post

下面的代码很乱所以不要判断太多!我正在尝试将基本用户配置文件发布到我的数据库中,我认为我离这不远,但我一直收到 404。

我非常了解所有这些技术,所以有人可以告诉我我做错了什么。

node.js POST 方法

var express = require('express');
var router = express.Router();
var mongo = require('mongodb');
var assert = require('assert');
var url = 'mongodb://localhost:27017/local';

/* GET home page. */
router.get('/', function(req, res, next) {
    res.render('signIn', { title: 'signIn' });
});

router.get('/getData', function(req, res, next){
    mongo.connect(url, function (err, db) {

        assert.equal(null, error);
        var cursor = db.collection('userData').find();
        cursor.forEach(function(doc, err){
            assert.equal(null, err);
            resultArray.push(doc);
        }, function() {
            db.close();
            res.render('index', {items: resultArray});
        } );
    });
});

router.post ('/insert', function(req,res,next) {
    var item = {
        email: req.body.email,
        firstName: req.body.firstName,
        lastName: req.body.lastName,
        password: req.body.password
    };
    mongo.connect(url, function (err, db) {
        assert.equal(null, err);
        db.collection('userData').insertOne(item, function (err, result) {
            assert.equal(null, err);
            console.log('item has been inserted');
            db.close;
        });
    });

    res.redirect('/');
});
module.exports = router;

形成 HTML

<!DOCTYPE html>
<html lang="en">
<head>


    <title>SignIn Page</title>
    <link rel="stylesheet" type="text/css" href="/stylesheets/signIn.css"/>


</head>

<body>

<div class="background">


<div class="loginFormWrapper">
    <form action="/users/submit" method="POST">
        <div class="loginForm">
            <label for="firstName">First name:</label>
            <input type="text" class="form-control" id="firstName" name="firstName" placeholder="first name">

            <label for="lastName">Last name:</label>
            <input type="text" class="form-control" id="lastName" name="lastName" placeholder="last name">

            <label for="email">Email address:</label>
            <input type="email" class="form-control" name="email" id="email" placeholder="email">

        </div>
        <div class="form-group">
            <label for="pwd">Password:</label>
            <input type="password" class="form-control" name="password" id="password" placeholder="password">
        </div>
        <div class="checkbox">
            <label><input type="checkbox"> Remember me</label>
        </div>
        <button type="submit" class="btn btn-default">Submit</button>

    </form>
    <form action="users" method="GET">
        <button type="submit" class="btn btn-default">get result</button>
    </form>
</div>

</div>


</body>
</html>

App.js

    var express = require('express');

    var path = require('path');
    var favicon = require('serve-favicon');
    var logger = require('morgan');
    var cookieParser = require('cookie-parser');
    var bodyParser = require('body-parser');
    var validate = require('form-validate');
    var mongoose = require('mongoose');




    var index = require('./routes/index');
    var users = require('./routes/users');
    var About = require('./routes/about');
    var signIn = require('./routes/signIn');
    var contact = require('./routes/contact');


    var app = express();




    // view engine setup
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'ejs');

    // uncomment after placing your favicon in /public
    //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
    app.use(logger('dev'));
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    app.use(cookieParser());
    app.use(express.static(path.join(__dirname, 'public')));
    app.use('/', index);
    app.use('/users', users);
    app.use('/About', About);
    app.use('/signIn', signIn);
    // app.use('/contact', contact);







//catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
 });

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

用户.js

var express = require('express');
var app = require("mongoose");
var router = express.Router();


/* GET users listing. */
router.get('/', function(req, res, next) {
  res.send('respond with a resource');
});

module.exports = router;

最佳答案

快速提醒一下,post() 方法只是从 <form> 中获取数据。你指定。为了能够获得该数据,您必须执行类似的操作。

应用程序.js

const express = require('express)
const mongoose = require('mongoose)

var app = express()

mongoose.connect('mongodb://localhost:"yourPortHere"/"mongoDBhere"')

现在 post 需要主体解析器才能检索数据并将其“翻译”成 JS,为此您需要主体解析器。

app.use(bodyParser.urlencoded({extended: false})) //Post Body Parser

现在让我们进入帖子

app.post("/action", (req, res) => {
var userData = {
    username: req.body.username,
    password: req.body.password
}

目前 userData 将保存您刚刚从 <form> 中检索到的数据 请记住 action="/YourActionHereapp.post("/YourActionHere") 的标识符所以这两个必须匹配,否则你将得不到数据。

要将其保存到 MongoDB,您首先需要创建一个您要存储的对象的模型,如果 MongoDB 有一个名为 movies 的数据库和一个名为 films 的目录你首先必须创建一个名为 film 的模型,因为 mongoose 会将它保存在目录 films 中(<- 按目录我的意思是集合)

因此:在文件夹 Models 中创建对象的模型

const mongoose = require('mongoose')
const Schema = mongoose.Schema
var film = new Schema({
title: String,
year: String,
director: String 
 })
module.exports = mongoose.model("movie", movieSchema)

为了能够使用新的 Schema,你必须将它导入到你的 app.js 中

var Film = require('pathToFilmSchema')

现在在您的帖子中,您将把 userData 保存到该架构中,而 mongoose 会将其存储在其 .js 中指定的集合中。

app.post("/action", (req, res) => {
 var userData = {
    title: req.body."name",
    year: req.body."name",
    director: req.body.""
}
new Film(userData)
})

如果结构相同 de 该变量中的数据将存储在 Schema 中,那么您只需调用方法 .save() ,您可以像这样立即调用它

newFil(userData)
.save()

现在 mongoose 将使用 film Schema 将一个新对象存储到您在顶部连接的数据库中。请记住,如果您没有名为 film 的集合,mongoDB 将创建一个名为 films(复数,总是)的集合并将 Schema 存储在那里。

保存后可以res.redirect()到“/”或呈现另一个页面,这取决于你。

关于html - 如何使用 node.JS 将数据 POST 到 MongoDB 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45417385/

相关文章:

java - MongoDB Java 驱动程序 : query where d>2, a ="ABC",b ="AA"

html - 网站在手机上显示为空白

php - html 中的表单没有重定向到 php

javascript - 如何检查 Jquery 是否被正确保存和嵌入?

javascript - 主干 .save() 上的 404 错误

java - 如何在 mongo morphia 中对 2 个日期求和?

css - 将前一个(第一个 defibed)div 放在下一个(第二个)div 的默认位置前面

javascript - 在 Node.js 数据流中通过换行获取 block

json - 在 bash 中使用 jq 查找并合并所有 package.json 文件?

node.js - mongoose文档删除后再次保存