NodeJS Express:我有两个 app.get 请求,它们混合在一起
NodeJS Express: I have two app.get requests and they blend together
所以我有 1 个请求是
app.get('/assignment/loans', (req, res) => {
const id = req.query.bookID;
}
还有一个是这样的:
app.get('/assignment/loans', (req, res) => {
const id = req.query.studentID;
}
不知什么原因,studentID那个不行,总是去bookID找。我用这个
http://localhost:3000/assignment/loans?bookID=1
它按预期工作,但如果我使用
http://localhost:3000/assignment/loans?studentID=9653
我得到:
这是一个应该只出现在 bookID 上的错误。我怎样才能区分这两者?提前谢谢你。
关于这两个请求的更多代码:https://pastebin.com/1A0jK3BX
实际上 express 框架将在请求发生时执行第一个端点,即
app.get('/assignment/loans', (req, res) => { const id = req.query.bookID;})
在重复端点的情况下,所以你应该使用一个路由并进行两个查询
而不是一个,所以代码将是这样的
app.get('/assignment/loans', (req, res) => {
const book_id = req.query.bookID;
const student_id = req.query.studentID
})
您还必须在数据库中执行之前对查询进行验证
你们有完全相同的路线
app.get('/assignment/loans', ...)
必须是一条路线。
尝试像下面这样组合 em
app.get('/assignment/loans', (req, res) => {
const bookId = req.query.bookID;
const studentId = req.query.studentID;
const loans = [];
if(bookId){
if(!Number.isInteger(parseInt(studentId))){
return res.status(422)
.setHeader('content-type', 'application/json')
.send({error: 'bookId not numeric'});
}
db.all('SELECT * FROM loan WHERE bookID=?', bookId, (err, rows) => {
if (err) {
res.status(422)
.setHeader('content-type', 'application/json')
.send({error: 'Problem while querying database'});
return;
}
if (rows.length === 0) {
res.status(404)
.setHeader('content-type', 'application/json')
.send({error: 'loan bookId was not found!'});
} else {
rows.forEach(row =>
loans.push({id: `${row.id}`, bookID: `${row.bookID}`}));
res.status(200)
.setHeader('content-type', 'application/json')
.send(loans);
}
});
}else if(studentId){
if(!Number.isInteger(parseInt(studentId))){
return res.status(422)
.setHeader('content-type', 'application/json')
.send({error: 'studentId not numeric'});
}
db.all('SELECT * FROM loan WHERE studentID=?', studentId, (err, rows) => {
if (err) {
return res.status(422)
.setHeader('content-type', 'application/json')
.send({error: 'Problem while querying database'});
}
if (rows.length === 0) {
res.status(404)
.setHeader('content-type', 'application/json')
.send({error: 'loan studentId was not found!'});
} else {
rows.forEach(row =>
loans.push({id: `${row.id}`, studentID: `${row.studentID}`}));
res.status(200)
.setHeader('content-type', 'application/json')
.send(loans);
}
});
}else{
return res.status(400)
.setHeader('content-type', 'application/json')
.send({error: 'Please provide required query string'});
}
});
您不能有 2 条路线具有相同的 url。第一个优先。
你需要这样处理。
app.get('/assignment/loans', (req, res) => {
const bookID = req.query.bookID;
const studentID = req.query.studentID;
if(bookID){
}
if(studentID){
}
}
简单回答:
app.get('/assignment/loans', (req, res) => {
const id = req.query.studentID ? req.query.studentID : req.query.bookID
}
所以我有 1 个请求是
app.get('/assignment/loans', (req, res) => {
const id = req.query.bookID;
}
还有一个是这样的:
app.get('/assignment/loans', (req, res) => {
const id = req.query.studentID;
}
不知什么原因,studentID那个不行,总是去bookID找。我用这个
http://localhost:3000/assignment/loans?bookID=1
它按预期工作,但如果我使用
http://localhost:3000/assignment/loans?studentID=9653
我得到:
这是一个应该只出现在 bookID 上的错误。我怎样才能区分这两者?提前谢谢你。
关于这两个请求的更多代码:https://pastebin.com/1A0jK3BX
实际上 express 框架将在请求发生时执行第一个端点,即
app.get('/assignment/loans', (req, res) => { const id = req.query.bookID;})
在重复端点的情况下,所以你应该使用一个路由并进行两个查询 而不是一个,所以代码将是这样的
app.get('/assignment/loans', (req, res) => {
const book_id = req.query.bookID;
const student_id = req.query.studentID
})
您还必须在数据库中执行之前对查询进行验证
你们有完全相同的路线
app.get('/assignment/loans', ...)
必须是一条路线。
尝试像下面这样组合 em
app.get('/assignment/loans', (req, res) => {
const bookId = req.query.bookID;
const studentId = req.query.studentID;
const loans = [];
if(bookId){
if(!Number.isInteger(parseInt(studentId))){
return res.status(422)
.setHeader('content-type', 'application/json')
.send({error: 'bookId not numeric'});
}
db.all('SELECT * FROM loan WHERE bookID=?', bookId, (err, rows) => {
if (err) {
res.status(422)
.setHeader('content-type', 'application/json')
.send({error: 'Problem while querying database'});
return;
}
if (rows.length === 0) {
res.status(404)
.setHeader('content-type', 'application/json')
.send({error: 'loan bookId was not found!'});
} else {
rows.forEach(row =>
loans.push({id: `${row.id}`, bookID: `${row.bookID}`}));
res.status(200)
.setHeader('content-type', 'application/json')
.send(loans);
}
});
}else if(studentId){
if(!Number.isInteger(parseInt(studentId))){
return res.status(422)
.setHeader('content-type', 'application/json')
.send({error: 'studentId not numeric'});
}
db.all('SELECT * FROM loan WHERE studentID=?', studentId, (err, rows) => {
if (err) {
return res.status(422)
.setHeader('content-type', 'application/json')
.send({error: 'Problem while querying database'});
}
if (rows.length === 0) {
res.status(404)
.setHeader('content-type', 'application/json')
.send({error: 'loan studentId was not found!'});
} else {
rows.forEach(row =>
loans.push({id: `${row.id}`, studentID: `${row.studentID}`}));
res.status(200)
.setHeader('content-type', 'application/json')
.send(loans);
}
});
}else{
return res.status(400)
.setHeader('content-type', 'application/json')
.send({error: 'Please provide required query string'});
}
});
您不能有 2 条路线具有相同的 url。第一个优先。 你需要这样处理。
app.get('/assignment/loans', (req, res) => {
const bookID = req.query.bookID;
const studentID = req.query.studentID;
if(bookID){
}
if(studentID){
}
}
简单回答:
app.get('/assignment/loans', (req, res) => {
const id = req.query.studentID ? req.query.studentID : req.query.bookID
}