App.post 返回空的花括号集
Posted
技术标签:
【中文标题】App.post 返回空的花括号集【英文标题】:App.post returning empty set of curly braces 【发布时间】:2021-04-08 12:24:21 【问题描述】:我正在构建一个 express.js 应用程序,它只从一个 mysql 数据库中获取数据并显示在屏幕上,我也在尝试实现一个插入功能,这样当我发布结果时我也可以通过浏览器添加数据库也是我返回空括号的路线点之一,不知道为什么,任何帮助都将不胜感激。
Index.js 下面是 addCountries.ejs
//brings you too add Country
app.get("/addCountries", (req, res) =>
res.render("addCountries")
console.log("hello")
)
//inserts data from add countries
app.post("/addCountries", (req, res) =>
sqlDAO.addCountry()
.then((data) =>
res.render("addCountries",
addCountries: data
)
console.log(req.body.co_name)
console.log("hello")
)
.catch((error) =>
res.send(error)
console.log("hello")
)
)
<h1>Add Country</h1>
<br>
<br>
<form action="/addCountries" method="POST">
<label for="cCode">Country Code:</label>
<input type="text" id="cCode" name="co_code"><br><br>
<label for="cName">Country Name:</label>
<input type="text" id="cName" name="co_name"><br><br>
<label for="CDetails">Country Details:</label>
<textarea type="text" id="CDetails" name="co_details"></textarea>
<input type="submit" value="Add">
</form>
SQLDAO.js
var pool
//creates pool based on database provided by project spec
mysql.createPool(
connectionLimit: 3,
host: 'localhost',
user: 'root',
password: 'password',
database: 'geography'
)
.then((result) =>
pool = result
)
.catch((error) =>
console.log(error)
)
var addCountry = function()
// returns new promise
return new Promise((resolve, reject) =>
// function that adds too database
var myQuery =
sql: "INSERT INTO country VALUES (?, ?, ?)",
values: [req.body.co_code, req.body.co_name, req.body.co_details]
pool.query(myQuery)
.then((data) =>
resolve(data)
console.log(data)
)
.catch(error =>
reject(error)
)
)
【问题讨论】:
add country 无权访问请求对象 - 您需要将其传入,以便将数据放入数据库并且数据库可以返回。如果您查看数据库,您可能会看到空的或未添加任何记录。 在 sqlDAO.js 还是 index.js 中? 两者,像这样:sqlDAO.addCountry(req)...
然后var addCountry = function(req) ...
好的,但我不完全明白为什么,如果你不介意的话,你也能解释一下吗?
【参考方案1】:
您需要将请求对象的引用传递给addCountry()
。这是因为SQLDAO.js
文件中的addCountry()
函数无权访问请求对象。
现在,在addCountry()
中,req
变量是未定义的,因此在编译 SQL 语句时没有要插入的数据。如果您查看数据库,您可能会看到空的或没有添加任何记录。
通过传入请求对象,它有数据放入数据库,数据库可以返回。
像这样编辑两个文件:
sqlDAO.addCountry(req)...
然后var addCountry = function(req) ...
这是必要的有两个原因:
在您的 app.post()
函数内部,req
和 res
都在该函数的本地范围内,并且在该函数之外不可用。
即使它们是伪全局的,变量也只能在它们创建的模块中使用。因此,您必须导出该变量,或者在这种情况下,将对它的引用传递给其他模块中的其他函数。
【讨论】:
以上是关于App.post 返回空的花括号集的主要内容,如果未能解决你的问题,请参考以下文章