【问题标题】:NodeJS & EJS POSTNodeJS 和 EJS 发布
【发布时间】:2018-07-31 07:30:06
【问题描述】:

我正在使用 NodeJS/Express 和 EJS 创建一个到 API 路由的表单。当我尝试 POST 请求并调用 req.body.password & req.body.confirm 时,我得到“未定义”。

index.js

import http from 'http';
import express from 'express';
import bodyParser from 'body-parser';
import mongoose from 'mongoose';
import passport from 'passport';
const LocalStrategy = require('passport-local').Strategy;
var flash = require('connect-flash');

import config from './config';
import routes from './routes';

let app = express();
app.server = http.createServer(app);

//middleware
app.use(bodyParser.json({
  limit: config.bodyLimit
}));

//EJS VIEWS CODE
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(flash());

我的控制器的一部分,带导入

import mongoose from 'mongoose';
import { Router } from 'express';
import Account from '../model/account';
import bodyParser from 'body-parser';
import passport from 'passport';
import config from '../config';
import express from 'express'
var async = require("async");
var nodemailer = require("nodemailer");
var crypto = require("crypto");

      if(req.body.password === req.body.confirm) {
          account.setPassword(req.body.password, function(err) {

EJS

<div class="row">
    <div class="col-md-12">
        <form action="http://localhost:3005/v1/account/reset/<%= token %>" method="POST">
          <legend>Reset Password</legend>
          <div class="form-group">
            <input type="password" name="password" value="" placeholder="New password" id="password" autofocus="autofocus" class="form-control"/>
          </div>
          <div class="form-group">
            <input type="password" name="confirm" value="" placeholder="Confirm password" id="confirm" class="form-control"/>
          </div>
          <div class="form-group">
            <button type="submit" class="btn btn-primary">Update Password</button>
          </div>
        </form>
    </div>
</div>

编辑:使用导入更新了我的控制器

【问题讨论】:

    标签: node.js express ejs


    【解决方案1】:

    查看您更新的代码 sn-p,您似乎正在使用 bodyParser.json,它只会解析 json 有效负载,而不是 form data 发布为正文。

    要接受表单提交,您还需要执行以下操作:

    // parse application/x-www-form-urlencoded
    app.use(bodyParser.urlencoded({ extended: false }))
    

    它通过邮递员为您工作,因为我假设在使用邮递员时您正在提交 json。

    【讨论】:

    • 我还有其他与 req.body 一起使用的 API 调用,但不是这个特定的。这也是唯一一个使用 EJS 的。我对 EJS 还很陌生,所以我不知道我是否遗漏了什么。
    • 渲染 ejs 文件时是否传递了令牌变量?
    • 是的,我将其发布在表单操作中。我已经确定了 EJS 表单没有发布它的问题。我使用 POSTMAN 并且代码成功运行。在 EJS 中,它没有发布 req.body.password 和 req.body.confirm @EndaMolloy
    • 成功了!只是为了将来 - 你介意解释为什么会这样吗? @lorefnon
    • bodyParser.json 返回的中间件仅在您的正文为 json 格式(并且具有兼容的 mimetype)时才解析正文。 bodyParser.urlencoded 返回的中间件解析 url 编码的表单数据,这是浏览器默认使用的(非多部分)表单。
    猜你喜欢
    • 2019-01-28
    • 2020-08-23
    • 2017-05-07
    • 2015-02-19
    • 2016-11-01
    • 2023-03-18
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多