javascript - 即使在浏览器中键入后端 Nodejs url 并显示来自 Oracle 的数据时,Angular 2 中的 404 错误
问题描述
我正在尝试在我的 Angular 前端中显示数据,该数据是针对链接到我的 Node 后端的 Oracle DB 调用的。目前,如果我转到 phsyiscal API 链接,我将看到数据,并将显示在我的后端 console.log 中。
我在这里错过了一些简单的事情吗?我是新手,所以如果这很容易,请提前道歉。
Angular 页面组件
import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import { DBService, Group} from '../db.service';
import { HttpClient } from '@angular/common/http';
import { NgIf } from '@angular/common/src/directives/ng_if';
import { element } from 'protractor';
import { ActivatedRoute } from '@angular/router';
import { Router } from '@angular/router';
@Component({
selector: 'app-flow',
templateUrl: './flow.component.html',
styleUrls: ['../css.css']
})
export class FlowComponent implements OnInit {
groups: Group[];
constructor(
private auth: AuthenticationService,
private dbService: DBService,
private route: ActivatedRoute,
private router: Router
) {}
ngOnInit() {
this.dbService.getGroup2().subscribe(groups => this.groups = groups);
}
}
数据库服务代码
getGroup2(): Observable<Group[]> {
const url = 'http://localhost:4200/api/' + 'employees';
const data = ({
});
return this._http.post(url, data)
.pipe(
map((res) => {
console.log(res);
return <Group[]> res;
})
);
}
后端
服务/路由器.js
const express = require('express');
const router = new express.Router();
const employees = require('../controllers/employees.js');
router.route('/employees')
.get(employees.get);
module.exports = router;
服务/database.js
const oracledb = require('oracledb');
const dbConfig = require('../config/database.js');
async function initialize() {
const pool = await oracledb.createPool(dbConfig.hrPool);
}
module.exports.initialize = initialize;
// close the function
async function close() {
await oracledb.getPool().close();
}
module.exports.close = close;
// simple executre function
function simpleExecute(statement, binds = [], opts = {}) {
return new Promise(async (resolve, reject) => {
let conn;
opts.outFormat = oracledb.OBJECT;
opts.autoCommit = true;
try {
conn = await oracledb.getConnection();
const result = await conn.execute(statement, binds, opts);
resolve(result);
} catch (err) {
reject(err);
} finally {
if (conn) { // conn assignment worked, need to close
try {
await conn.close();
} catch (err) {
console.log(err);
}
}
}
});
}
module.exports.simpleExecute = simpleExecute;
控制器/employees.js
const employees = require('../db_apis/employees.js');
async function get(req, res, next) {
try {
const context = {};
// context.id = parseInt(req.params.id, 10);
const rows = await employees.find(11);
if (req.params.id) {
if (rows.length === 1) {
res.status(200).json(rows[0]);
} else {
res.status(404).end();
}
} else {
res.status(200).json(rows);
}
} catch (err) {
next(err);
}
}
module.exports.get = get;
db_apis/employees.js
const database = require('../services/database.js');
const baseQuery =
`SELECT * FROM DB.EMPLOYEES`;
async function find(context) {
// let query = baseQuery;
// const binds = {};
// if (context.id) {
// binds.employee_id = context.id;
// query += `\nwhere employee_id = :employee_id`;
// }
const result = await database.simpleExecute(baseQuery);
console.log(result.rows);
return result.rows;
}
module.exports.find = find;
解决方案
你有router.route('/employees').get(employees.get);
,但在你的服务中你正在做this._http.post(url, data)
你应该做一个get
请求this._http.get(url)...
。
推荐阅读
- swift - Swift:为什么字典中的键类型必须是 Hashable 类型
- javascript - 如何设计动态座椅规划器?
- ios - 设计方法减少不必要的 api 调用并在本地存储数据
- javascript - NodeJS - 如何使用 module.exports 从模型传递异步数据?
- python - 如何在 Python 3 中有条件地创建和使用父类
- java - 为什么我需要初始化这个成员数组
- sql - 如何从另一个值中删除相似的文本
- git - git difftool 打开mergetool 视图
- android - org.gradle.api.tasks.TaskExecutionException:任务执行失败.. 原因:org.gradle.api.internal.tasks.compile.CompilationFailedException:
- node.js - 以编程方式跨 Azure、VSTS 和 Graph 访问 Microsoft 标识