需要在nodejs中解析多个url

时间:2018-02-06 08:18:52

标签: javascript mysql node.js express

我需要构建一个具有多个URL的应用程序,例如,我有大约10000个表单,我需要为每个表单分配不同的URL。我怎样才能做到这一点?我最近开始学习nodejs。所以...请提供我应该做的所有事情的深入描述?

事实上,我需要创建多个表单,其中包含名称和地址等参数。我需要它们显示在一个页面上。我使用expressjs和mysql db。

总的来说,我有一个index.js页面,它提示用户输入他的姓名和地址。我需要为每个用户提供不同的URL。在另一个页面中,我需要在一个页面上显示所有用户及其各自的URL。

1 个答案:

答案 0 :(得分:1)

有许多不同的方法来做你想要做的事情,你要做的事情有三个真正的困难,第一个是制定路由,第二个是解析表格,第三个是存储数据。

路由

首先,您需要正确路由所有请求。有许多不同的方法可以实现这一目标。 您可以研究的第一种方法是自己完成所有路由(我真的不建议这样做,但值得了解):

// First we will make a server.
const server = http.createServer();

// Then we will listen for every request.
server.on('request', (request, response) => {
    // You can process the 'request.url' yourself here

    // For example:
    if (request.url.startsWith('/route1')) {
        doRoute1(request, response);
    } else if (request.url.startsWith('/route2')) {
        doRoute2(request, response);
    } else {
        throw404();
    }

    // Or you can do a switch/case, for example:
    // 'request.url.split('/')[1]' means find the first directory/file
    // '/path/file.js' -> 'path'
    // '/file.js' -> 'file.js'
    switch (request.url.split('/')[1]) {
        case 'route1':
            doRoute2(request, response);
            break;

        case 'route2':
            doRoute2(request, response);
            break;

        default:
            throw404();
            break;
    }
});

// 'Listen' for connections to the server on port 80.
server.listen(80);

现在,该方法仅适用于最简单的应用程序,否则应避免使用,因为它将成为维护的噩梦。

第二个选项是使用http esq路由框架,示例包括https://jsfiddle.net/w2hoqmts/KoaConnect

这是前一个使用“Express”的示例:

// Import the express module
const app = require('express')();

// Here is the routing section.
app.get('/route1', doRoute1);
app.get('/route2', doRoute2);

// This is a catch all if none of the routes are matched
app.use(throw404);

// Listen on port 80
app.listen(80);

Express对于更复杂的任务非常有用,因为它使用中间件esq流/结构的方式。

表单

有许多不同的方式可以将数据发布到Web服务器,这些方法包括(但不限于); JSON,XML,URL编码和multipart / form-data。 在您开始尝试使用其中任何一个之前,我建议您确定最适合您当前用例的内容。

你提到了表单,所以我假设你的意思是'multipart / form-data'(由html表单生成)。为此,您可以使用名为“Express”的模块,请注意multer也可以处理文件上传。

以下是使用multer的示例:

// Import the express module
const app = require('express')();

function showForm(request, response) {
    // Here you can generate the html form.
}
function processForm(request, response) {
    // The form's text fields will be found in 'request.body'
}

app.get('/form', showForm);

// https://github.com/expressjs/multer
app.post('/form', upload.fields([]), processForm)

app.listen(80);

其他身体处理方法可在此处找到:multer

数据库

我不是很精通数据库,但是,这里有一个关于如何使用NodeJS连接到MySQL数据库的快速示例,这使用了“https://github.com/expressjs/body-parser”:

// Import the mysql module
var mysql = require('mysql');

// Connect to your database
var connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'username',
    password : 'sssshhhh',
    database : 'myDatabase'
});

// Connect to the db
connection.connect();

// Query example
connection.query('SELECT * FROM users WHERE user_id = 1',
    function (error, results, fields) {
        if (error) throw error;
        console.log('The solution is: ', results[0].solution);
    }
);

// Close the connection
connection.end();

使用这三个拼图,我相信你可以找到解决问题的方法。