如何从前端调用restapi函数(ejs / html)

时间:2019-07-16 13:33:14

标签: javascript node.js rest

当试图按下按钮查询数据库并显示结果时,我基本上试图从html / ejs调用“ get”方法。抱歉,这很简单,但是我无法正常工作。

我试图require并在script标签内调用该函数,但这在浏览器上不起作用。我试图用<script src="text/javascript" src="filename">添加js文件,但这也会导致错误。 我构建的其余API使用oracledb与oracle 11g(Toad)对话。

我基本上是想在此类中调用get函数

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(context);

        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);
    }
}
...

db_apis / employees.js

const oracledb = require('oracledb');
const database = require('../services/database');

async function find(context) {
    const baseQuery =
    `SELECT *
    FROM choice_names`;
    console.log('in find');
    let query = baseQuery;
    const binds = {};
    let additionalQuery = '\nwhere ';

    if (context.id) {
        binds.choice_name = context.id;
        additionalQuery += `choice_name = :choice_name`;
        // query += `\nwhere choice_name = :choice_name`;
    } else if (context.user) {
        binds.choice_user = context.user;
        additionalQuery += `choice_user = :choice_user`;
    } else if (context.date) {
        binds.choice_date = context.date;
        additionalQuery += `choice_date = :choice_date`;
    }

    if (context.id || context.user || context.date) {
        query += additionalQuery;
    }
    console.log(query);
    const result = await database.simpleExecute(query, binds);

    return result.rows;
}
...

router.js

const express = require('express');
const router = new express.Router();
const employees = require('../controllers/employees');

router.route('/employees/:id?')
    .get(employees.get)
    .post(employees.post)
    .put(employees.put)
    .delete(employees.delete);

module.exports = router;

index.ejs

...
<button onclick="get()">Click me</button>
...

1 个答案:

答案 0 :(得分:0)

您(非常)容易混淆前端和后端代码。

该快速应用程序位于后端,在某些端口上运行,从而暴露/employees/:id路由。

但是前端部分无权访问后端脚本,因此您需要从前端到该路由执行XHR(Ajax)请求并获取结果。

例如,在jQuery中,它可以是

function get(){
   $.get('/employees/1').done(..do something..)
}

您可以参考this answer上的角度进行操作。