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-response
到 token
.
如果您将数据作为 json
发送,则对发送 json 对象的键进行相同的重命名。
我正在发送用户名、密码和 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-response
到 token
.
如果您将数据作为 json
发送,则对发送 json 对象的键进行相同的重命名。