JSON 正在从 Web 表单向 express 和 bodyParser 发送包含单引号的键值

JSON key value being sent with enclosing single quotes from web form to express and bodyParser

我正在发送用户名、密码和 h-captcha-response 令牌以通​​过登录表单表达。用户名和密码从表单中发送正常,没有单引号,h-captcha-response(由 hcaptcha 制定并发送回 Web 表单并也发送)正在发送并附上单引号和 hcaptcha中间件 ( express-hcaptcha ) 看不到令牌。来自中间件的响应是....

Error: bad request - no token provided in body

我正在使用 https://github.com/vastus/express-hcaptcha

当我转储请求时,我看到 h-captcha-response 包含在单引号中。我相信这可能与发送到 express 的表单输入没有设置为 application/json 有关,但这是一个猜测,因为我是 node/express.

的新手

请求转储的适用部分在下面,然后是 node/express 信息。有人能指出我正确的方向吗?非常感谢 JW

请求转储(通过console.log)

————-
<snip>
….
….
body:
   { username: ‘xxxx’,
     password: ‘xxxx’,
     'h-captcha-response': ‘xxxxxxxxxxxxxx’ },
  _body: true,
  length: undefined,
….
….
<snip>

js文件的适当部分 ——————

const http = require('http');
const mysql = require('mysql');
const express = require('express');
const session = require('express-session');
const cors = require('cors');
const hcaptcha = require('express-hcaptcha');

//hcaptcha secret key
const SECRET = “xxxxxx”; 

var bodyParser = require('body-parser');

var connection = mysql.createConnection({
…..<snip>
});

const path = require('path');
const app = express();

app.use(cors());
app.use(bodyParser.json());
app.set("view engine","hbs");

app.use(bodyParser.urlencoded({extended : true}));


//create app server
var server = app.listen(3000,  "0.0.0.0", function () {
  var host = server.address().address
  var port = server.address().port
});

app.post('/verify', hcaptcha.middleware.validate(SECRET), (req, res) => {
  res.json({message: 'verified!', hcaptcha: req.hcaptcha});
});

密钥 'h-captcha-response' 用引号引起来,因为这是在 javascript:[=22 中创建包含特殊字符(在本例中为 -)的对象密钥的唯一方法=]

const bad = { a-b: '' }
            // ^ Parsing error: unexpected token, expected ","

const good = { 'a-b': '' } // no error

虽然节点没有在此处创建对象,只是将其登录到控制台,但它仍然遵循通用的 js 语法。

至于错误:Error: bad request - no token provided in body。 它正在发生,因为 express-hcaptcha 中间件 expects the field named token. If the field as absent or evaluated to the falsy value you're getting the error 您现在可以观察。

如果您以 application/x-www-form-urlencoded 的形式发送数据,那么要解决此问题,您必须将 html 表单中的验证码字段的 name 属性从 h-captcha-responsetoken.

如果您将数据作为 json 发送,则对发送 json 对象的键进行相同的重命名。