简体   繁体   English

为什么我在 Express 后端的补丁请求中收到错误代码 500?

[英]Why am I getting an error code 500 on patch request for Express backend?

My angular frontend is sending a patch request to my express backend and all routes are working except for my patch routes.我的 angular 前端正在向我的 express 后端发送补丁请求,除了我的补丁路由之外,所有路由都在工作。 The error is: Error: No default engine was specified and no extension was provided.错误是:错误:未指定默认引擎且未提供扩展名。 Do I need to do something with the results parameter in the arrow functions of the updateQuote and updatePhrase functions in the backend service?我是否需要对后端服务中 updateQuote 和 updatePhrase 函数的箭头函数中的结果参数做一些事情?

//quotes.service.ts (angular)

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { Quote } from '../models/quote.model';
import { Phrase } from '../models/phrase.model';

@Injectable({
  providedIn: 'root'
})
export class QuotesService {

  constructor(private http: HttpClient) { }

  getQuotes(): Observable<any> {
    return this.http.get('http://localhost:3000/quotes');
  }

  postQuote(quote: Array<Quote | Phrase>) {
    return this.http.post('http://localhost:3000/quotes', quote).subscribe((data) => {
    });
  }

  deleteQuote(quoteid: any) {
    return this.http.delete(`http://localhost:3000/quotes/delete/${quoteid}`);
  }

  updateQuote(quoteid: any, payload: any) {
    return this.http.patch(`http://localhost:3000/quotes/update/${quoteid}`, payload);
  }

}
//quotes.controller.js (express)

var express = require('express');
var router = express.Router();
const db = require('../services/quotes.service')

router.get('/', db.getQuotes);
router.get('/phrases', db.getPhrases);
router.post('/', db.createQuote);
router.delete('/delete/:quoteid', db.deleteQuote);
router.patch('/update/:quoteid', db.updateQuote);
router.patch('/phrases/update/:phraseid', db.updatePhrase);

module.exports = router;
//quotes.service.js (express)

const Pool = require('pg').Pool
const pool = new Pool({
  user: 'postgres',
  host: 'localhost',
  database: 'leaquotesapp',
  password: 'password',
  port: 5432,
});

const getQuotes = (request, response) => {
  pool.query('SELECT * FROM quotes ORDER BY quoteid ASC', (error, results) => {
    if (error) {
      throw error
    }
    response.status(200).json(results.rows)
  });
}

const getPhrases = (request, response) => {
  pool.query('SELECT * FROM phrases ORDER BY phraseid ASC', (error, results) => {
    if (error) {
      throw error
    }
    response.status(200).json(results.rows)
  });
}

const createQuote = (request, response) => {
  let quote = request.body[0];

  pool.query(`INSERT INTO quotes (title, context, speakers) 
    VALUES ('${quote.title}', '${quote.context}', '${quote.speakers}') RETURNING quoteid`, (error, results) => {
    if(error) {
      throw error;
    }

    //Insert phrases...
    let quoteid = results.rows[0].quoteid;

    for(let i = 1; i < request.body.length; i++) {
      request.body[i].quoteid = quoteid;
      createPhrase(request.body[i]);
    }

    response.status(201).send();
  });
}

function createPhrase(phrase) {
  pool.query(`INSERT INTO phrases (sequence, speaker, text, quoteid) 
  VALUES (${phrase.sequence}, '${phrase.speaker}', '${phrase.text}', ${phrase.quoteid})`, (error, results) => {
    if(error) {
      throw error;
    }
  });
}

const deleteQuote = (request, response) => {
  let quoteid = request.params.quoteid;

  pool.query(`DELETE FROM quotes WHERE quoteid = ${quoteid}`, (error, results) => {
    if(error) {
      throw error;
    }
  });

  pool.query(`DELETE FROM phrases WHERE quoteid = ${quoteid}`, (error, results) => {
    if(error) {
      throw error;
    }
  });

  response.status(200).json({'Delete': 'Success'});
}

const updateQuote = (request, response) => {
  let quoteid = request.params.quoteid;
  let column = request.body.keys[0];
  let value = request.body.column;

  pool.query(`UPDATE quotes SET ${column} = ${value} WHERE quoteid = ${quoteid}`, (error, results) => {
    if(error) {
      throw error;
    }
  });

  response.status(200).json({'Update': 'Success'});
}

const updatePhrase = (request, response) => {
  let phraseid = request.params.quoteid;
  let column = request.body.keys[0];
  let value = request.body.column;

  pool.query(`UPDATE phrases SET ${column} = ${value} WHERE phraseid = ${phraseid}`, (error, results) => {
    if(error) {
      throw error;
    }
  });

  response.status(200).json({'Update': 'Success'}); 
}

module.exports = {
  getQuotes,
  getPhrases,
  createQuote,
  deleteQuote,
  updateQuote,
  updatePhrase
}

Please provide your app.js file.请提供您的 app.js 文件。 Maybe you have not set the view engine or the view engine used is not configured well and that is what causing the error.也许您没有设置视图引擎或使用的视图引擎配置不正确,这就是导致错误的原因。

Your app.js file would reveal more.您的 app.js 文件会显示更多信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM