Nodejs 函数

Nodejs 函数

var mongoose = require(‘mongoose’) ; // 导入组件 var models = require(’./models’) ; // 导入自定义组件 var User = models.User ; // 使用User模型,对应的users表 mongoose.connect(‘mongodb://localhost/mongogroup’) ; // 连接数据库 怎样将下段代码改写成一个没有无参函数,我想在views下的index.ejs中用onclick="functionname()"调用它 这本是一段查询数据库中数据的代码 exports.doSearch = function(req, res){ var query_doc = {groupname:req.body.groupname } ; // 固定数据 User.count(query_doc,function(err,doc){// 直接利用mongodb的命令进行操作 if(doc == 0) { // 输入错误,没有此信息 res.send(‘Your query content is: ’ + req.body.groupname + ’ , but not exist!’); } else { console.log(req.body.groupname); res.send(‘Your query content is:’ + req.body.groupname); } }) ; };


3 回复

当然可以!为了将这段代码改写为一个可以在 index.ejs 文件中通过 onclick 调用的函数,我们需要将其封装在一个单独的模块中,并导出一个可以接受参数的函数。这样我们可以从客户端传递参数给服务器端处理。

首先,我们创建一个新的模块文件 search.js

// search.js

const mongoose = require('mongoose');
const models = require('./models');
const User = models.User;

mongoose.connect('mongodb://localhost/mongogroup');

module.exports = function doSearch(groupname, callback) {
    const query_doc = { groupname }; // 固定数据

    User.count(query_doc, (err, doc) => {
        if (err) return callback(err);

        if (doc === 0) { // 输入错误,没有此信息
            return callback(null, 'Your query content is: ' + groupname + ', but not exist!');
        }

        console.log(groupname);
        callback(null, 'Your query content is: ' + groupname);
    });
};

接下来,在原来的路由文件中导入并使用这个新模块:

// routes.js 或者你现有的路由文件

const express = require('express');
const router = express.Router();
const search = require('./search'); // 引入新的搜索模块

router.post('/do-search', (req, res) => {
    const groupname = req.body.groupname;

    search(groupname, (err, result) => {
        if (err) {
            res.status(500).send('An error occurred');
        } else {
            res.send(result);
        }
    });
});

module.exports = router;

最后,在 index.ejs 文件中添加一个按钮,使其通过 AJAX 调用 /do-search 路由:

<!-- index.ejs -->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Index Page</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
    <input type="text" id="groupname" placeholder="Enter group name">
    <button onclick="performSearch()">Search</button>

    <script>
        function performSearch() {
            const groupname = document.getElementById('groupname').value;

            $.ajax({
                url: '/do-search',
                method: 'POST',
                data: { groupname },
                success: function(response) {
                    alert(response);
                },
                error: function(error) {
                    alert('An error occurred');
                }
            });
        }
    </script>
</body>
</html>

这样,你就将原来的无参函数改写成了一个可以接受参数并返回结果的函数,并且可以在客户端通过点击按钮触发这个函数。


Node中pojo支持通过UML生成么?

要在 index.ejs 中通过 onclick 调用一个没有参数的函数,并且该函数需要与后端交互来查询数据库中的数据,我们可以创建一个新的路由来处理前端的请求。这样前端可以通过 AJAX 调用后端接口来实现功能。

以下是修改后的代码:

后端代码(Node.js)

首先,我们创建一个新的路由来处理前端的请求:

var express = require('express');
var router = express.Router();

router.get('/search', function(req, res) {
    var query_doc = { groupname: req.query.groupname }; // 获取查询参数

    User.count(query_doc, function(err, doc) {
        if (err) {
            return res.status(500).send("Error occurred while querying the database.");
        }
        if (doc == 0) {
            res.send('Your query content is: ' + req.query.groupname + ', but not exist!');
        } else {
            console.log(req.query.groupname);
            res.send('Your query content is: ' + req.query.groupname);
        }
    });
});

module.exports = router;

前端代码(index.ejs)

接下来,在前端的 index.ejs 文件中添加一个按钮并使用 JavaScript 发起 AJAX 请求来调用后端的新路由:

<!DOCTYPE html>
<html>
<head>
    <title>Index Page</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
    <input type="text" id="groupname" placeholder="Enter groupname">
    <button onclick="doSearch()">Search</button>

    <script>
        function doSearch() {
            var groupname = document.getElementById('groupname').value;
            $.get('/search', { groupname: groupname }, function(data) {
                alert(data);
            });
        }
    </script>
</body>
</html>

解释

  1. 后端代码

    • 创建了一个新的路由 /search,接收 GET 请求。
    • 从查询参数中获取 groupname,然后查询数据库并返回结果。
  2. 前端代码

    • 添加了一个文本输入框和一个按钮。
    • 当点击按钮时,调用 doSearch() 函数。
    • doSearch() 函数获取输入框中的值,然后通过 jQuery 的 $.get 方法发起 AJAX 请求到后端 /search 路由。
    • 后端响应的数据通过回调函数显示在警告框中。

这种方式不仅符合你的需求,还能确保前后端分离,提高代码的可维护性和扩展性。

回到顶部