Forms 试图弄清楚如何使用mongodb、node和html从客户端到服务器端以及反过来使用表单?
我是这里的初学者。我目前正在使用twitter引导(html、css、js),node.js用于服务器端,mongodb用于无sql数据库。我一直在看一大堆东西,我在寻找一个答案或任何方向,如何着手有一个表单,即用户帐户注册填写在html端(已经这样做了) 它位于routes文件夹中,在我的server.js文件中作为require('./routes/home.js)调用Forms 试图弄清楚如何使用mongodb、node和html从客户端到服务器端以及反过来使用表单?,forms,node.js,mongodb,Forms,Node.js,Mongodb,我是这里的初学者。我目前正在使用twitter引导(html、css、js),node.js用于服务器端,mongodb用于无sql数据库。我一直在看一大堆东西,我在寻找一个答案或任何方向,如何着手有一个表单,即用户帐户注册填写在html端(已经这样做了) 它位于routes文件夹中,在我的server.js文件中作为require('./routes/home.js)调用 <code> var express = require('express') , home = re
<code>
var express = require('express')
, home = require('./routes/home.js')
, path = require('path')
, http = require('http')
, mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
app.post('/signUp', home.signUpUser);
我在package.json文件中将mongoose作为一个依赖项,并试图找到更多关于它的文档,这非常令人困惑
我的视图引擎使用的是html(不是jade或ejs),尽管我愿意使用它们,但它们很容易理解
我直接从我的电脑上运行mongo,但我一直在研究mongohq,以使事情变得更简单
基本上,如果有人可以帮助我或指导我如何填写表单,以便将信息放入(POST)mongo中的db中,然后从mongo中取出(GET),并作为用户配置文件提供到页面上
另一件我可能需要澄清的事情是如何让它显示在新页面上,如我的个人资料页面(我是否必须创建模板/页面,或者如何将为创建帐户而保存的信息链接到我的个人资料页面)
使用HTML、JS(jQuery,JSON)、Node.JS和Mongodb指导从客户端到服务器端的整个表单过程,包括POST(表单)和GET(到新页面)
更新 所以在这里,我尝试了这篇文章,所以现在它是工作的,但得到一个找不到html模块错误 这是我的server.js文件的代码
<code>
var express = require('express')
, home = require('./routes/home.js')
, path = require('path')
, http = require('http')
, mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
app.post('/signUp', home.signUpUser);
----现在这是my home.js(又名路由器js文件)
在您的表单中,“action”是应该发出请求的url,例如action=“/signup”
我假设您在示例中使用的是express(来自res.render
调用)
使用express,您需要将bodyParser
中间件添加到您的middlewarestack中,包括:
app.use(express.bodyParser());
在此之后,您需要邮政路线:
app.post('/signup',routes.postedSignup);
routes.postedSignup
可能如下所示:
exports.postedSignup = function (req, res, next) {
if (req.body && req.body.email && req.body.password === req.body.confirmPassword) {
var obj = {
firstName: req.body.firstName || 'na',
lastName: req.body.lastName || 'na',
email: req.body.email,
password: bcrypt.hashSync(req.body.password, 8),
phone: req.body.phoneNumber || '555-555-555',
birthday: new Date(req.body.birthday) || new Date()
};
db.userCollection.insert(obj, function (err) {
if (!err) {
res.redirect('/login');
} else {
next(err);
}
});
} else {
next(new Error('Incorrect POST'));
}
};
在这里,db
应该是您的数据库驱动程序,bcrypt
是用随机盐散列密码的模块
要从数据库中获取此数据,您需要为其创建路由:
app.get('/profile/:email',routes.getProfile);
然后,该路由看起来类似于这样(假定用户已登录,并且存在有效会话,并且用户数据保存为req.session.user
):
要使来自res.locals.user
的数据可用,您需要使用某种模板将数据注入res.render
。任何设置为res.locals
(或作为对象传递到渲染调用中)的值都可以在模板中使用,在这种情况下,您要访问的变量将被称为user
next()
调用将错误传递给errorhandler,我认为您的中间件中的errorhandler是最后一个。如果没有,你应该读一读
您还可以使用客户端模板处理这种情况,因此您只需从路由返回json,而不呈现任何模板。为此,您只需将res.render
替换为res.json
,并将模板名称替换为希望作为json发送的对象
对于真实世界的应用程序,您必须进一步充实这一点,例如检查是否没有用户已经使用相同的电子邮件等。注册可以分为两个不同的功能,以便可以重用另一个功能来编辑用户配置文件
还包括express.csrf
到您的中间件,以保护用户免受csrf攻击
希望这能让你继续。嘿,看看我的更新,仍然有问题。。。我还没有搞乱hash或bcrypt,但是will,只是想先让它工作起来。如果你注意到一些我没有意识到的事情,请告诉我。Nevermind让它工作,现在开始加密密码,然后执行get。谢谢
<code>
var mongoose = require('mongoose');
var conn = mongoose.connection;
exports.index = function(req, res){
res.render('index');
};
exports.signUp = function(req, res){
res.render('signUp');
};
exports.about = function(req, res) {
res.render('about');
};
exports.signUpUser = function (req, res, next) {
if (req.body && req.body.email && req.body.password === req.body.confirmPassword) {
var obj = {
firstName: req.body.firstName || 'na',
lastName: req.body.lastName || 'na',
email: req.body.email,
password: req.body.password,
phone: req.body.phoneNumber || '555-555-555',
birthday: new Date(req.body.birthday) || new Date()
};
conn.collection('users').insert(obj, function (err) {
if (!err) {
res.redirect('/about.html');
} else {
next(err);
}
});
} else {
next(new Error('Incorrect POST'));
}
};
exports.postedSignup = function (req, res, next) {
if (req.body && req.body.email && req.body.password === req.body.confirmPassword) {
var obj = {
firstName: req.body.firstName || 'na',
lastName: req.body.lastName || 'na',
email: req.body.email,
password: bcrypt.hashSync(req.body.password, 8),
phone: req.body.phoneNumber || '555-555-555',
birthday: new Date(req.body.birthday) || new Date()
};
db.userCollection.insert(obj, function (err) {
if (!err) {
res.redirect('/login');
} else {
next(err);
}
});
} else {
next(new Error('Incorrect POST'));
}
};
exports.getProfile = function (req, res, next) {
if (req.session.user && req.session.user.email === req.params.email || req.session.user.admin) {
db.userCollection.findOne({ email: req.params.email }, function (err, result) {
if (!err && result) {
res.locals.user = result;
res.render('userprofile');
} else {
var errorMessage = err || new Error('no user found');
next(errorMessage);
}
});
} else {
next(new Error('Insufficient permissions'));
}
};