Getting error Response with status: 404 Not Found

2019-08-23 04:01发布

问题:

I am facing an issue while running the angular and nodejs app which I am trying to integrate with Neo4j app. The issues are the errors that I get-

POST http://localhost:7474/viewNodesStart 404 (Not Found)

and

EXCEPTION: Response with status: 404 Not Found for URL: 
http://localhost:7474/viewNodesStart

Though this topic is repetitive in StackOverflow , I am still posting it because the following links suggestions didn't suit my issue.

Angular2 404 Not Found for URL: http://localhost/WebApi2/api/hero

EXCEPTION: Response with status: 404 Not Found for URL / Angular2

https://github.com/johnpapa/angular-tour-of-heroes/issues/94

Please check my code

app.component.ts

import { Component, OnInit } from '@angular/core';
import { Injectable } from '@angular/core';

import { ToasterService } from '../toaster.service';

import { FormGroup, FormControl, FormBuilder, Validators } from '@angular/forms';
import { Http, Response, Headers } from '@angular/http';
import { config } from '../config';
import { Subject } from 'rxjs';
import 'rxjs/add/operator/map';
import { map } from 'rxjs/operators';
import 'rxjs/Rx';
import { Observable } from 'rxjs';

// Statics
import 'rxjs/add/observable/throw';


@Component({
  selector: 'app-neo4j-primary',
  templateUrl: './neo4j-primary.component.html',
  styleUrls: ['./neo4j-primary.component.css']
})

export class Neo4jPrimaryComponent implements OnInit {

  constructor(private http: Http,  private notify: ToasterService) { }

  ngOnInit() {
    this.viewNodesStart();
  }


  emptyObj;
  info;

  // -------------------------------  Nodes Entire Data --------------

   viewNodesStart() {

    console.log("INSIDE viewNodesStart()")

    // Nodes Value

    console.log("inside Nodes Value");
    var data = localStorage.getItem('token');

    console.log("data is=>",data);

    var url = config.url;
    var port = config.port;

    this.http.post("http://"+url+":"+port+"/viewNodesStart",this.emptyObj)
      .map(Response => Response.json())
      .subscribe((res: Response) => {

        console.log("XXXXXXXXXXXX Response on /viewNodesStart", res);

        this.info = res;

        console.log('success', this.info.statusCode);
        if (this.info.statusCode == 200) {
          this.notify.Success("Data added successfully");

        } else {
          this.notify.Error("Data is not inserted")
        }
      });

  }

}

server.js

var express = require('express');
var cors = require('cors');
var bodyParser = require('body-parser');
const neo4j = require('neo4j-driver').v1;

var app = express();
var restify = require('restify');
var expressJwt = require('express-jwt');
var session = require('express-session');
var config = require('./config.json')

app.use(restify.plugins.bodyParser());

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

app.use(bodyParser.json());

app.use(bodyParser.json({
  type: 'application/vnd.api+json'
}))

app.use(cors());

app.use(session({
  secret: config.secret,
  resave: false,
  saveUninitialized: true
}));

//*****TM Server ******/

app.use('/viewNodesStart', require('./neo4jserver/tmserver'));

app.get('/', function(req, res) {
  res.send('Welcome');
  console.log("welcome in console");

});

// start server
var server = app.listen(7473, function() {
  console.log('Server listening at http://' + server.address().address + ':' + server.address().port);
});

nodeserver.js

// Require Neo4j
var neo4j = require('neo4j-driver').v1;
var path = require('path');
var logger = require('morgan');
var bodyParser = require('body-parser');
var express = require('express');

var router = express.Router();
var app = express();

// Create Driver
const driver = new neo4j.driver("bolt://localhost:11001",neo4j.auth.basic("neo4j", "abc"));

// Run Cypher query
const cypher = 'MATCH (n) RETURN count(n) as count';

//View Engine

app.set('views', path.join(__dirname, 'views'));

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: false
}));
app.use(express.static(path.join(__dirname, 'public')));

var session = driver.session();

app.post('/', function(req, res) {
  console.log("INSIDE NODE JS CONTROLLER OF viewNodesStart");
  console.log("BODY IS ", req.body);

  var log = JSON.parse(req.body);

  console.log(log);
  session.run('MATCH (n) RETURN n LIMIT 25').then(function(result) {
    result.records.forEach(function(record) {
      console.log("record", record);
      console.log("result = ", result)

      console.log("record._fields[0].properties", record._fields[0].properties);
      res.status(200).send({
        statusCode: '200',
        result: result
      });
    });
  }).catch(function(err) {
    console.log(err);
  }).then(res=>{
    console.log("res.records.length", res.records.length);
  }
  )
  res.send('It Works');
  res.send(result);

});

var allowCrossDomain = function(req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  if (req.method === "OPTIONS")
    res.send(200);
  else
    next();
}

console.log('Server started on port 11005');

module.exports = router;
module.exports = app;

回答1:

I guess the problem is with the url you are passing to the http request. You are passing the path of the anuglar route and want to call the node api. Change the url there to the nodeapi url. Then it will work.