【问题标题】:insert post data into mongoDB using Node使用 Node 将 post 数据插入 mongoDB
【发布时间】:2016-06-16 08:14:07
【问题描述】:

我对 node JS 和 mongo 很陌生。

我正在开发一个在我的数据库中存储用户信息的个人网站。

为简单起见,假设我在翡翠中有以下形式...

form(class="inputs", action="/login", method="post")
    input(type="text", name="email",class="form-control", id="emailLogin", placeholder="Queen's Email")

我已经建立了一个数据库,并且可以使用以下 javascript 连接到它...

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/user');
var db = mongoose.connection;

db.on('error', console.error);
db.once('open', function() {
    // Create your schemas and models here.
});

我想为使用上述表单注册的每个用户存储来自email 的输入。

我猜我首先必须创建一个模式,它可能看起来像这样,但我不确定......

var Schema = mongoose.Schema;

var userSchema = new Schema({
    email: String
});
//I think I have to create a model too?

为了获取 POST 数据,我想我需要一些看起来像这样的代码......

app.post('/login', function(request, response){
//I am not sure what to put inside
});

我的问题是,谁能告诉我如何一起实现所有这些,以便每次用户使用他们的电子邮件注册时,它都会保存在数据库中。研究这个非常困难,并且尝试过很多次,但都失败了。

编辑

这是我的index.js 文件...

var express = require('express');
var router = express.Router();

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

module.exports = router;

另外,这是我的routes 目录中的另一个文件users.js,我不确定它的用途是什么...

var express = require('express');
var router = express.Router();

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

module.exports = router;

【问题讨论】:

  • post() 方法在哪里?
  • @zangw 我想我明白你的意思了,我的索引文件中是否应该包含一个 post 方法?在那种情况下,我没有。
  • 更准确的说是post(''/login)use.js更好,我猜这个文件只是为了给用户做url路由?

标签: javascript node.js mongodb


【解决方案1】:

这里有一些示例代码,希望对您有所帮助。

var userSchema = new Schema({
    email: String
});

var User = mongoose.model('User', userSchema);

app.post('/login', function(request, response){
    var u = new User({
        email: request.body.name
    });

    u.save(function(err) {
        if (err)
           throw err;
        else 
           console.log('save user successfully...');
    });
});

为了正确解析post url,这里可以使用express,示例代码如下。

var bodyParser = require('body-parser')
app.use( bodyParser.json() );       // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({     // to support URL-encoded bodies
  extended: true
})); 

【讨论】:

  • 这看起来不错,但我仍然无法让它工作。当我提交表单时,数据库中没有保存任何内容
  • 我认为你的代码应该可以工作,它对我不起作用的原因可能是我提交表单时不断收到的404 Not Found
  • @Bolboa,你的帖子网址是什么?
  • 我不太确定,在这里,我将编辑我的答案以包含我的 index.js 文件。 Webstorm 帮助完成了我的大部分代码,所以我很难理解这一切。
  • 我明白了,我不确定在哪里/如何包含 post 方法,但鉴于这是一个单独的问题,我仍然会给你最好的答案。但如果您能帮助解决 404 问题,我将不胜感激
【解决方案2】:

user.model.js

var mongoose = require('mongoose')
    , Schema = mongoose.Schema
    , Q = require('q')
    ;

var UserSchema = mongoose.Schema({
    email: String,
})

UserSchema.methods.Save = function() {
    return Q.ninvoke(this, 'save');
}

var User = mongoose.model('User', UserSchema);

user.controller.js

var mongoose = require('mongoose')
    , User = mongoose.model('User')
    ;

app.post('/create', function(request, response){
   var user = new User();
   user.email = request.body.email;

    return user.Save().then(function(users) {
        // some code if save succeed
    }, function(err){
        // some code if save failed
    });
});

【讨论】:

    猜你喜欢
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 2014-06-29
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多