gpt4 book ai didi

javascript - Angular 4200 端口显示带有 html 的数据,但 nodejs 8080 端口显示没有 html 的 json 数据

转载 作者:行者123 更新时间:2023-11-30 14:47:44 24 4
gpt4 key购买 nike

我正在使用 angular 5 和 node js 来为事件数据创建一个 crud。当我尝试从 4200 端口(http://localhost:4200/event) 获取事件数据时,它运行良好。它以 html 格式显示所有值的数据。但是当我使用 8080 端口(http://localhost:8080/event) 时,它来自 nodejs,它只在 json 中显示数据。此处未显示来自 event.component.html 的 html 内容。 express.js 看起来像这样

/* ===================
Import Node Modules
=================== */
const express = require('express');
const app = express();
const router = express.Router();

const mongoose = require('mongoose');
const config = require('./database');
const path = require('path');
const appRoot = require('app-root-path');

//custom module
const event = require('../config/routes/event.router');

const bodyParser = require('body-parser');
const cors = require('cors');
const port = process.env.PORT || 8080; // Allows heroku to set port


mongoose.Promise = global.Promise;
//assigning value
process.env.NODE_ENV = 'devlopment';

/**
* Database connection
*/

mongoose.connect(config.uri, {
useMongoClient: true,
}, (err) => {
// Check if database was able to connect
if (err) {
console.log('Could NOT connect to database: ', err); // Return error message
} else {
console.log('Connected to ' + config.db); // Return success message
}
});

app.use(cors());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());


app.use(express.static(path.join(appRoot.path, 'dist')));

/**
* Routing
*/

app.use('/event', event); //Event Router

app.get('*', (req, res) => {
res.sendFile(path.join(appRoot.path, 'dist/index.html'));
});

/**
* Assiging port to server
*/
app.listen(port, () => {
console.log('Listening on port ' + port + ' in ' + process.env.NODE_ENV + ' mode');
});

我的 event.router.js 看起来像这样

const Event = require('../../model/event.model');
var multer = require('multer');
var upload = multer({ dest: './public/uploads/img/',fileFilter:function(req,file,cb){
var ext = file.originalname.split('.').pop();
cb(null, file.fieldname + '-' + Date.now() + '.' + ext);
}
}).single('eventimage');

/* GET ALL EVENTS */
router.get('/', function(req, res, next) {
Event.find(function (err, events) {
if (err) return next(err);
res.json(events);
});
});

/* GET SINGLE EVENT BY ID */
router.get('/:id', function(req, res, next) {
Event.findById(req.params.id, function (err, post) {
if (err) return next(err);
res.json(post);
});
});

module.exports = router;

event.component.html 看起来像这样

<div class="container">
<h1>Event List</h1>
<table class="table">
<thead>
<tr>
<th>Event Id</th>
<th>Event Name</th>
<th>Event Desc</th>
<th>Event Date</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let event of events">
<td><a routerLink="/event-details/{{ event._id }}">{{ event._id }}</a></td>
<td>{{ event.eventname }}</td>
<td>{{ event.eventdesc }}</td>
<td>{{ event.eventdates }}</td>
</tr>
</tbody>
</table>
</div>

event.components.ts 看起来像这样

import { Component, OnInit } from '@angular/core';
import { EventService } from '../event.service';

@Component({
selector: 'app-event',
templateUrl: './event.component.html',
styleUrls: ['./event.component.css']
})
export class EventComponent implements OnInit {

events: Event[] = [];

constructor(
protected eventService: EventService
) { }

ngOnInit() {
this.getAll();
}

getAll() {
this.eventService.getEvents().subscribe(res => {
this.events = res as Event[];
}, err => {
console.log(err);
});
}
}

event.service.ts 看起来像这样

import { Injectable } from '@angular/core';
import { Http, Headers, RequestOptions } from '@angular/http';
import { Observable } from 'rxjs';
import { HttpClientModule } from '@angular/common/http';

import { HttpClient } from "@angular/common/http";
import 'rxjs/add/operator/map';


@Injectable()
export class EventService {

domain = 'http://localhost:8080';

headers = new Headers({ 'Content-Type': 'application/json' });

constructor(
private http: Http,
) { }

getEvent(id: string) {
return this.http.get(this.domain + '/event/' + id, { headers: this.headers }).map(res => res.json());
}

getEvents(){
return this.http.get( this.domain + '/event', {headers: this.headers}).map(res => res.json() );
}

}

所以有人可以告诉我这里有什么问题吗?为什么我在 8080 端口上获取 json 格式的数据,为什么它在 4200 端口上显示正常?我如何在 8080 端口使用 html 获取数据?任何帮助和建议都将不胜感激。

最佳答案

当我告诉您将事件移动到其他答案中的 get * 请求之上时,我就知道会发生这种冲突。

这就是为什么建议使用/api 路由。

这里发生的事情是:-

当您从 node.js 为您的 Angular 应用程序提供服务时。即在端口 8080 上请求

http://localhost:8080/events

express发现这个路由注册在events模块中,所以它返回数据,数据是JSON形式,请求不会去你返回索引文件的路由(需要加载angular)

虽然 localhost:4200 请求直接发送到 Angular CLI,因此它们不会与快速路径冲突。

正如我所建议的,只需将“/api”路径放在您在 express 中创建的每个 api 之前,您的问题就会得到解决,因为 express 将不再具有“/events”路径,因此它将请求传递给应用程序.get(*) 函数,您的 Angular 文件将被提供。

注意/api 只是一个标准命名约定,您可以输入 xyz 也可以。

这种做法还将确保您不会在其他请求中遇到同样的问题。

关于javascript - Angular 4200 端口显示带有 html 的数据,但 nodejs 8080 端口显示没有 html 的 json 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48637989/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com