如何使用 node.JS 将数据发布到 MongoDB 数据库中?

lc1*_*993 5 html forms post mongodb node.js

下面的代码很乱所以不要判断太多!我正在尝试将基本用户配置文件发布到我的数据库中,我认为我离得很远,但我一直收到 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;
Run Code Online (Sandbox Code Playgroud)

表单 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>
Run Code Online (Sandbox Code Playgroud)

应用程序.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;
Run Code Online (Sandbox Code Playgroud)

用户.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;
Run Code Online (Sandbox Code Playgroud)

小智 5

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

应用程序.js

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

var app = express()

mongoose.connect('mongodb://localhost:"yourPortHere"/"mongoDBhere"')
Run Code Online (Sandbox Code Playgroud)

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

app.use(bodyParser.urlencoded({extended: false})) //Post Body Parser
Run Code Online (Sandbox Code Playgroud)

现在让我们进入帖子

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

目前 userData 将保存您刚刚从<form> “记住”中检索到的数据action="/YourActionHere,因此app.post("/YourActionHere")这两个数据必须匹配,否则您将无法获取数据。

要将其保存到 MongoDB,您首先需要创建要存储的对象的模型,如果 MongoDB 有一个名为movie的数据库,其中有一个名为movie的目录,您首先必须创建一个名为film的模型,因为 mongoose 会将其保存在目录电影(<- 我所说的目录是指收藏)

因此:在文件夹 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)
Run Code Online (Sandbox Code Playgroud)

为了能够使用新的架构,您必须将其导入到 app.js 中

var Film = require('pathToFilmSchema')
Run Code Online (Sandbox Code Playgroud)

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

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

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

newFil(userData)
.save()
Run Code Online (Sandbox Code Playgroud)

现在,猫鼬将使用电影模式将一个新对象存储到您在顶部连接的数据库中。请记住,如果您没有名为 film 的集合,mongoDB 将创建一个名为film的集合(始终为复数形式)并将架构存储在那里。

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


小智 1

您已发布到 url users/submit,但我没有看到任何 API users/submit。您说过要使用用户作为/users网址,但您定义了/submit内部吗/users

你可以在expressjs中通过这个 路由