Node Express 3.4.4和Jade表单数据未定义

时间:2014-03-22 21:34:05

标签: forms node.js post express pug

以下是app.use部分

// redis/session store
app.use(express.cookieParser());
app.use(express.session({ 
    store: new redisStore({ host: 'localhost', 
                            port: 6379, 
                            db: 2
                            }), 
    secret: SID
}));

app.use(passport.initialize());
app.use(passport.session());

app.use(express.urlencoded());
app.use(express.methodOverride());
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(app.router);
app.use(require('stylus').middleware(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public')));

这是路由

var saveProfile     = require('./routes/saveProfile');
.
.
.

// form handling 
app.post('/saveProfile',saveProfile.save);

,这是表单

的处理程序
exports.save = function(req,res) {
    try {
        var i = 0;
        console.log(req.body.displayName);
    }
    catch(e) {
        console.log(e.message);
    }
};

最后生成实际形式的玉代码

form(method='POST',action='/saveProfile')
    div(class='topBannerHeading')
        span.
            Profile
        div
            input.formButton(type='submit',text='Save',value='Save')
    div(class='formHolder')
        h1.
            Your Cloud Services
        a(href='/googleRequestAuthorization')
            img.selectedService(src='images/Google-48x48.png',alt='Authorize Google')
        h1.
            Personal
        span
            div.
                Name:
            input#displayName(type='text',value=profile.displayName,style='width:300px')
            div.
                Address:
            input#AddressLine1(type='text',style='width:300px')
            div.

            input#AddressLine2(type='text',style='width:300px')
            div.
                Town:
            input#AddressTown(type='text',style='width:200px')
            div.
                County: 
            input#AddressCounty(type='text',style='width:200px')
            div.
                Post/Zip code   
            input#Postcode(type='text',style='width:200px')
            div(style='margin-top:40px').
                Telephone   
            input#Telephone(type='text',style='width:200px')
            div.
                Mobile: 
            input#Mobile(type='text',style='width:200px')
            div.
                Fax No: 
            input#FaxNo(type='text',style='width:200px')
            div.
                Email:  
            input#EmailAddress(type='text',style='width:300px',value=profile.email)
            div.
                Web:    
            input#WebAddress(type='text',style='width:300px')
            input#id(type='text',style='visibility:hidden')

查看请求对象的标题

内容类型是     应用程序/ x-WWW窗体-urlencoded

并且内容长度返回为0(零)

我尝试添加BodyParser()

但仍然调用处理程序req.body.displayName未定义

任何想法我做错了什么,并提前感谢。

1 个答案:

答案 0 :(得分:0)

使用名称而不是ID。所以玉文件说的地方

input#displayName(type='text',value=profile.displayName,style='width:300px')

并将其替换为

input#displayName(type='text',name='displayName',value=profile.displayName,style='width:300px')

在另一个可以在这里找到的问题中回答了这个问题; nodejs, express and jade: problems with inserts from form to database