Javascript 如何使用Node.js构建一个典型的REST类型系统

Javascript 如何使用Node.js构建一个典型的REST类型系统,javascript,mysql,node.js,Javascript,Mysql,Node.js,我对如何使用Node.js构建一个典型的REST类型的web应用程序感到非常困惑(即使我使用的是套接字) 在典型的WAMP堆栈中,您有一个公共javascript文件和服务器端PHP文件。用户可能能够执行JS函数,如 函数updateDetails(){ 服务器端PHP文件类似于 var stmt = "UPDATE table SET user = :user"; var params = (':user', $user); stmt->execute(); 现在我知道了node my

我对如何使用Node.js构建一个典型的REST类型的web应用程序感到非常困惑(即使我使用的是套接字)

在典型的WAMP堆栈中,您有一个公共javascript文件和服务器端PHP文件。用户可能能够执行JS函数,如

函数updateDetails(){

服务器端PHP文件类似于

var stmt = "UPDATE table SET user = :user";
var params = (':user', $user);
stmt->execute();
现在我知道了node mysql,但是我不知道它是如何以同样的方式实现的。我如何在服务器端维护一个语句列表,并允许用户在客户端简单地执行这些语句呢

我已经安装了node_modules/mysql

在我的服务器(app.js)中


但是,除非我在那里添加所有语句,否则我似乎无法从公共JS文件中访问它们。

有一些库将数据库表包装为资源,并将它们公开为REST服务(GET、POST、PUT、DELETE)

例如,用于此目的。如果您不想从头开始编写路由,您应该研究其他类似的框架

如果您只是使用express(4.x),则可以按如下方式声明路由:

// In users.js
var express = require('express');
var users = new express.Router();
users.get('/', function (req, res, next) {
    // access mysql, grab all users, then...
    res.json(results);
})
users.get('/:id', function (req, res, next) {
    var userid = req.params.id;
    // access mysql, grab user by id, then...
    res.json(result);
})
users.put('/', function (req, res, next) {
    var newUser = req.body;
    // you can also use POST instead of PUT, and alter where the information for the new user should come from.
    // insert a new row with the data found in newUser then...
    res.json(createdUser);
});
users.delete('/:id', function (req, res, next) {
    var userid = req.params.id;
    // delete the user by id then...
    res.json(deletedUser);
});
如果你真的很有冒险精神,或者坚持让http方法做它们应该做的事,你可以包括一个补丁路由来更新用户

您可以选择直接在路由中包含mysql,或者声明另一个模块,然后在路由中引用它

// more complete version of /users/:id
var mysql = require('mysql');
var connectionString = 'fill me in';
var pool = mysql.createPool(connectionString);
users.get('/:id', function (req, res, next) {
    var userid = req.params.id;
    var statement = "SELECT * FROM 'users' WHERE id = ?";
    pool.query(statement, [userid], function (err, rows) {
        if (err) { res.status(500).json(err); } // if you want to expose why you can't get the user by id.
        else if (rows.length == 0) { res.status(404); } // could not find user with the given id.
        else { res.json(rows[0]); } // return the found user.
    });
})

客户端代码和服务器代码之间的关系是相同的,但您的服务器代码恰好也是JavaScript代码。但是,JavaScript代码并不相同。换句话说,您不是用PHP编写服务器代码,而是用JavaScript编写。
// In users.js
var express = require('express');
var users = new express.Router();
users.get('/', function (req, res, next) {
    // access mysql, grab all users, then...
    res.json(results);
})
users.get('/:id', function (req, res, next) {
    var userid = req.params.id;
    // access mysql, grab user by id, then...
    res.json(result);
})
users.put('/', function (req, res, next) {
    var newUser = req.body;
    // you can also use POST instead of PUT, and alter where the information for the new user should come from.
    // insert a new row with the data found in newUser then...
    res.json(createdUser);
});
users.delete('/:id', function (req, res, next) {
    var userid = req.params.id;
    // delete the user by id then...
    res.json(deletedUser);
});
// more complete version of /users/:id
var mysql = require('mysql');
var connectionString = 'fill me in';
var pool = mysql.createPool(connectionString);
users.get('/:id', function (req, res, next) {
    var userid = req.params.id;
    var statement = "SELECT * FROM 'users' WHERE id = ?";
    pool.query(statement, [userid], function (err, rows) {
        if (err) { res.status(500).json(err); } // if you want to expose why you can't get the user by id.
        else if (rows.length == 0) { res.status(404); } // could not find user with the given id.
        else { res.json(rows[0]); } // return the found user.
    });
})