即使没有设置授权计划也无法使用 Postman 访问 Sqlite 数据库
Can't Access Sqlite db with Postman Even with No Auth Schedule Set Up
我让 Postman 试图访问我的 API 一个在后端使用 express 的 vue 应用程序。我将 express 服务器设置为使用 sqlite3,服务器似乎 运行 但我只在尝试通过 api 调用访问其方法时出错。
首先,我使用基本命令 vue create .
创建了 vue 应用程序,并添加了几个额外的选项,例如 vuex、路由器、sass 等...然后我创建了一个名为 backend
有 2 个文件 index.js
和 config.js
。以下是文件:
index.js
const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");
const app = express();
const { db, port } = require("./config.js");
app.use(bodyParser.json());
app.use(
bodyParser.urlencoded({
extended: true,
})
);
app.use(cors());
const getUsers = (request, response) => {
console.log("ran /test");
db.query("SELECT * FROM wallets", (error, results) => {
if (error) {
throw error;
}
response.status(200).json(results.rows);
});
};
const registerUser = (request, response) => {
const { wallet } = request.body;
insertNewUser(wallet)
.then((results) => {
if (results) {
console.log("it worked");
}
response
.status(201)
.json({ status: "success", message: "Wallet added." });
})
.catch((error) => {
response.status(500).json({ status: "fail", message: error });
});
};
function insertNewUser(wallet) {
return db.query("INSERT INTO wallets (wallet) VALUES ()", [wallet]);
}
app.route("/test", getUsers);
app.route("/register", registerUser);
app.listen(port);
console.log("App is running on port " + port);
config.js
const sqlite3 = require("sqlite3");
const path = require("path");
let db = new sqlite3.Database(
path.resolve(__dirname, "test.db"),
sqlite3.OPEN_READWRITE,
(err) => {
if (err) {
console.error(err.message);
}
console.log("Connected to the database.");
}
);
module.exports = {
db,
port: "30005",
};
我使用 db sqlite 浏览器在 backend
目录中创建了一个 sqlite 数据库,如下图所示:
这是我向 test
函数发送 postman get 请求时得到的结果,该函数应该显示数据库中的钱包条目
顺便说一句,我正在 运行 将此服务器与 yarn run start:server
连接起来,它是我在根项目目录中的 package.json
文件中的一个脚本。这是我的 package.json
的 scripts
部分的样子:
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"start:server": "nodemon backend/index.js --ignore 'src/**/*.js'"
},
为什么我的 get 请求失败了?
有两件事导致了这个问题。首先,我使用 get
而不是 query
。其次,我使用 app.get
而不是 app.route
。正确运行 /test
api 的代码如下所示:
index.js
const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");
const app = express();
const { db, port } = require("./config.js");
app.use(bodyParser.json());
app.use(
bodyParser.urlencoded({
extended: true,
})
);
app.use(cors());
const getUsers = (request, response) => {
console.log("ran /test");
db.get("SELECT * FROM wallets", (error, results) => {
if (error) {
throw error;
}
response.status(200).json(results.rows);
});
};
app.get("/test", getUsers);
app.listen(port);
console.log("App is running on port " + port);
我让 Postman 试图访问我的 API 一个在后端使用 express 的 vue 应用程序。我将 express 服务器设置为使用 sqlite3,服务器似乎 运行 但我只在尝试通过 api 调用访问其方法时出错。
首先,我使用基本命令 vue create .
创建了 vue 应用程序,并添加了几个额外的选项,例如 vuex、路由器、sass 等...然后我创建了一个名为 backend
有 2 个文件 index.js
和 config.js
。以下是文件:
index.js
const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");
const app = express();
const { db, port } = require("./config.js");
app.use(bodyParser.json());
app.use(
bodyParser.urlencoded({
extended: true,
})
);
app.use(cors());
const getUsers = (request, response) => {
console.log("ran /test");
db.query("SELECT * FROM wallets", (error, results) => {
if (error) {
throw error;
}
response.status(200).json(results.rows);
});
};
const registerUser = (request, response) => {
const { wallet } = request.body;
insertNewUser(wallet)
.then((results) => {
if (results) {
console.log("it worked");
}
response
.status(201)
.json({ status: "success", message: "Wallet added." });
})
.catch((error) => {
response.status(500).json({ status: "fail", message: error });
});
};
function insertNewUser(wallet) {
return db.query("INSERT INTO wallets (wallet) VALUES ()", [wallet]);
}
app.route("/test", getUsers);
app.route("/register", registerUser);
app.listen(port);
console.log("App is running on port " + port);
config.js
const sqlite3 = require("sqlite3");
const path = require("path");
let db = new sqlite3.Database(
path.resolve(__dirname, "test.db"),
sqlite3.OPEN_READWRITE,
(err) => {
if (err) {
console.error(err.message);
}
console.log("Connected to the database.");
}
);
module.exports = {
db,
port: "30005",
};
我使用 db sqlite 浏览器在 backend
目录中创建了一个 sqlite 数据库,如下图所示:
这是我向 test
函数发送 postman get 请求时得到的结果,该函数应该显示数据库中的钱包条目
顺便说一句,我正在 运行 将此服务器与 yarn run start:server
连接起来,它是我在根项目目录中的 package.json
文件中的一个脚本。这是我的 package.json
的 scripts
部分的样子:
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"start:server": "nodemon backend/index.js --ignore 'src/**/*.js'"
},
为什么我的 get 请求失败了?
有两件事导致了这个问题。首先,我使用 get
而不是 query
。其次,我使用 app.get
而不是 app.route
。正确运行 /test
api 的代码如下所示:
index.js
const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");
const app = express();
const { db, port } = require("./config.js");
app.use(bodyParser.json());
app.use(
bodyParser.urlencoded({
extended: true,
})
);
app.use(cors());
const getUsers = (request, response) => {
console.log("ran /test");
db.get("SELECT * FROM wallets", (error, results) => {
if (error) {
throw error;
}
response.status(200).json(results.rows);
});
};
app.get("/test", getUsers);
app.listen(port);
console.log("App is running on port " + port);